Java 在Jackson中将空值序列化为零的简单方法
我的部分响应是一些BigDecimal字段,我希望在这些特定字段为空时将其序列化为0。Jackson library中是否有一种简单的方法来实现这一点(即使用字段注释或类似的方法),或者此处是否需要自定义序列化程序?您需要自定义序列化程序(尝试扩展StdSerializer,NullSerializer有一个私有的默认构造函数…) 如果希望以这种方式处理类中的所有空字段,只需对目标类进行注释:Java 在Jackson中将空值序列化为零的简单方法,java,serialization,jackson,Java,Serialization,Jackson,我的部分响应是一些BigDecimal字段,我希望在这些特定字段为空时将其序列化为0。Jackson library中是否有一种简单的方法来实现这一点(即使用字段注释或类似的方法),或者此处是否需要自定义序列化程序?您需要自定义序列化程序(尝试扩展StdSerializer,NullSerializer有一个私有的默认构造函数…) 如果希望以这种方式处理类中的所有空字段,只需对目标类进行注释: @JsonSerialize(nullsUsing=NullsToZeroSerializer.cla
@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();
}
}
公共类NullToZeroSerializer扩展了StdSerializer{
受保护的NullToZeroSerializer(类t){
超级(t);
}
@凌驾
public void serialize(对象值、JsonGenerator gen、SerializerProvider提供程序)引发IOException{
if(值实例BigDecimal){
gen.writeNumber(0);
}否则{
writeNull将军();
}
}
}请修复您回复中的链接。它指向当前页面。此线程的第二个答案已被删除,因此链接断开…我怀疑这是唯一的方法。谢谢你的详细描述。