我正在寻找一种使用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将它们转换为科学记数法时,我不能再使用它们了。
答案 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);