【问题标题】:How do you override the null serializer in Jackson 2.0?你如何覆盖 Jackson 2.0 中的 null 序列化程序?
【发布时间】:2013-08-07 10:51:56
【问题描述】:

我正在使用 Jackson 进行 JSON 序列化,并且我想覆盖 null 序列化器 - 具体而言,以便将 null 值序列化为 JSON 中的空字符串,而不是字符串“null”。

我找到的关于如何设置空序列化程序的所有文档和示例都参考了 Jackson 1.x——例如,http://wiki.fasterxml.com/JacksonHowToCustomSerializers 底部的代码不再与 Jackson 2.0 一起编译,因为 StdSerializerProvider 不再存在在图书馆。该网页描述了 Jackson 2.0 的模块接口,但模块接口没有明显的方法来覆盖空序列化程序。

谁能提供关于如何在 Jackson 2.0 中覆盖空序列化程序的指针?

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    如下重写 JsonSerializer 序列化方法。

    public class NullSerializer extends JsonSerializer<Object> {
      public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        // any JSON value you want...  
        jgen.writeString("");
      }
    }
    

    然后您可以将NullSerializer 设置为自定义对象映射器的默认值:

    public class CustomJacksonObjectMapper extends ObjectMapper {
    
    public CustomJacksonObjectMapper() {
        super();
        DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl();
        sp.setNullValueSerializer(new NullSerializer());
        this.setSerializerProvider(sp);
      }
    }
    

    或使用@JsonSerialize 注释为某些属性指定它,例如:

    public class MyClass {
    
      @JsonSerialize(nullsUsing = NullSerializer.class)
      private String property;
    }
    

    【讨论】:

    • 谢谢 - 这就是我想要的。两个注意事项: 1)不需要扩展 ObjectMapper;它的公共 API 允许设置空值序列化程序,因此只需创建一个实例就足够了。 2) Jackson 2.2.2 中显然存在一个错误,该错误会阻止使用树模型在空节点上调用空序列化程序;它只会被 POJO 调用。维护人员告诉我,这已在 2.3 中修复。
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多