Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jackson中将空值序列化为零的简单方法_Java_Serialization_Jackson - Fatal编程技术网

Java 在Jackson中将空值序列化为零的简单方法

Java 在Jackson中将空值序列化为零的简单方法,java,serialization,jackson,Java,Serialization,Jackson,我的部分响应是一些BigDecimal字段,我希望在这些特定字段为空时将其序列化为0。Jackson library中是否有一种简单的方法来实现这一点(即使用字段注释或类似的方法),或者此处是否需要自定义序列化程序?您需要自定义序列化程序(尝试扩展StdSerializer,NullSerializer有一个私有的默认构造函数…) 如果希望以这种方式处理类中的所有空字段,只需对目标类进行注释: @JsonSerialize(nullsUsing=NullsToZeroSerializer.cla

我的部分响应是一些BigDecimal字段,我希望在这些特定字段为空时将其序列化为0。Jackson library中是否有一种简单的方法来实现这一点(即使用字段注释或类似的方法),或者此处是否需要自定义序列化程序?

您需要自定义序列化程序(尝试扩展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();
    }
}
公共类NullToZeroSerializer扩展了StdSerializer{
受保护的NullToZeroSerializer(类t){
超级(t);
}
@凌驾
public void serialize(对象值、JsonGenerator gen、SerializerProvider提供程序)引发IOException{
if(值实例BigDecimal){
gen.writeNumber(0);
}否则{
writeNull将军();
}
}

}

请修复您回复中的链接。它指向当前页面。此线程的第二个答案已被删除,因此链接断开…我怀疑这是唯一的方法。谢谢你的详细描述。