杰克逊 - 用于对象内部的自定义序列化器

时间:2016-03-06 21:30:46

标签: java serialization jackson

我正在寻找一种使用Jackson将所有BigIntegers输出为字符串的方法。这些BigIntegers在我的应用程序中的许多类中使用,因此将@JsonSerialize添加到所有字段不是一个选项。

我创建了一个自定义的Jackson序列化程序,但这仅适用于基类,被序列化,而不是类中的属性。所以,这不起作用:

function getStepsToStopInBasement(liftSteps) {
  var currentFloor = 0;
  var steps;

  for (var i = 0; i < liftSteps.length && !steps; i += 1) {
    switch (liftSteps.charAt(i)) {
      //UP
      case "U":
        currentFloor += 1;
        break;
        //DOWN
      case "D":
        currentFloor -= 1;
        break;
    }
    //CHECK BASEMENT
    if (currentFloor === -1) {
      steps = i;
    }
  }
  return steps;
}

console.log(getStepsToStopInBasement("UUDDUDUUDUDUDUDUDUDUDDD")); //22
console.log(getStepsToStopInBasement("UUDDUDUUDUDUDUDUDDD")); //18
console.log(getStepsToStopInBasement("UUDDUDDUDUDUDUDUDUDDD")); //6
console.log(getStepsToStopInBasement("UUDDUDUUDUDUDUDUDUDUDDD")); //22
console.log(getStepsToStopInBasement("UUDDUDUDDD")); //8

有没有办法让杰克逊序列化某种类型的所有属性,而不是将@JsonSerialize添加到所有属性中?

要序列化的对象可以是包含BigIntegers的任何POJO。

PS:将BigIntegers转换为String的想法是JavaScript不会将这些数字转换为科学记数法。我的所有主键都使用BigInteger,因此当JavaScript将它们转换为科学记数法时,我不能再使用它们了。

1 个答案:

答案 0 :(得分:2)

看看this guide。例如

ObjectMapper mapper = new ObjectMapper();
SimpleModule testModule = new SimpleModule("MyModule", new Version(1, 0, 0, null));
testModule.addSerializer(new BigIntegerSerializer());
mapper.registerModule(testModule);