Java 自定义BigInteger JSON序列化程序

Java 自定义BigInteger JSON序列化程序,java,spring,jackson,objectmapper,Java,Spring,Jackson,Objectmapper,我正在尝试实现一个自定义JSON序列化程序类,以便在JSON响应中将objectBigInteger值显示为字符串 我已经实现了一个自定义序列化程序类 public class CustomCounterSerializer extends StdSerializer<BigInteger> { private static final long serialVersionUID = 5440920327083673598L; public CustomCount

我正在尝试实现一个自定义JSON序列化程序类,以便在JSON响应中将object
BigInteger
值显示为字符串

我已经实现了一个自定义序列化程序类

public class CustomCounterSerializer extends StdSerializer<BigInteger> {

    private static final long serialVersionUID = 5440920327083673598L;

    public CustomCounterSerializer() {
        this(BigInteger.class);
    }

    public CustomCounterSerializer(Class<BigInteger> vc) {
        super(vc);
    }

    @Override
    public void serialize(BigInteger value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException {
        BigInteger valueJson = value==null ? BigInteger.valueOf(0) : value;
        jsonGenerator.writeString(valueJson.toString());
    }
}
它失败,因为它包含
null
而不是
null值:“0”


但是对象的
null
值总是转到no-args构造函数,甚至像
this(biginger.class)
不使用我的方法并打印
null

您需要告诉Jackson它应该使用您的序列化程序 即使对于空值也是如此。您可以使用
@JsonSerializer
也可以使用参数

在MyObject类中,它将如下所示:

@JsonSerialize(using = CustomCounterSerializer.class,
               nullsUsing = CustomCounterSerializer.class)
private BigInteger nullValue;

旁注:您不应该假设字段是按特定顺序序列化的。我正在使用@JsonSerialize并将该类指定为该属性的序列化程序。我不接受命令。我需要根据值的行为。您的断言在
nullValue
之前需要
nonNullValue
@JsonSerialize(using = CustomCounterSerializer.class,
               nullsUsing = CustomCounterSerializer.class)
private BigInteger nullValue;