在Jackson中将null序列化为零的简单方法



我的部分响应是一些BigDecimal字段,当它们为null时,我想将这些特定字段序列化为0。Jackson库中是否有一种简单的方法来实现这一点(即使用字段注释或类似的东西(,或者这里是否需要自定义序列化程序?

您需要一个自定义序列化程序(尝试扩展StdSerializer,NullSerializer有一个私有默认构造函数…(。

如果您希望类中的所有空字段都以这种方式处理,您可以简单地注释目标类:

@JsonSerialize(nullsUsing = NullsToZeroSerializer.class)

如果您想在整个项目中执行此操作,请为ObjectMapper创建一个SimpleModule,并将序列化程序添加到此模块,并将模块添加到ObjectMapper。

如果只想对BigDecimal执行此操作,那么只需使用instanceof检查传递给serialize方法的值就足够了。

public class NullToZeroSerializer extends StdSerializer<Object> {
protected NullToZeroSerializer(Class<Object> t) {
super(t);
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (value instanceof BigDecimal) {
gen.writeNumber(0);
} else {
gen.writeNull();
}
}

}

最新更新