Java Jackson JSON生成器为缺少的对象创建空JSON值

Java Jackson JSON生成器为缺少的对象创建空JSON值,java,json,jackson,gson,Java,Json,Jackson,Gson,我已经开始使用Jackson作为JSON生成器,作为google GSON的替代品。我遇到了Jackson生成对象的问题:如果对象确实为null,则为null。另一方面,GSON在JSON中不生成任何条目,这是我想要的行为。当一个对象丢失时,有没有办法阻止Jackson生成空对象/值 杰克逊 ObjectMapper mapper = new ObjectMapper(); StringWriter sw = new StringWriter(); mapper.

我已经开始使用Jackson作为JSON生成器,作为google GSON的替代品。我遇到了Jackson生成对象的问题:如果对象确实为null,则为null。另一方面,GSON在JSON中不生成任何条目,这是我想要的行为。当一个对象丢失时,有没有办法阻止Jackson生成空对象/值

杰克逊

        ObjectMapper mapper = new ObjectMapper();
    StringWriter sw = new StringWriter();
    mapper.writeValue(sw, some_complex_object);
    String jackson = sw.getBuffer().toString();

    System.out.println("********************* START JACKSON JSON ****************************");
    System.out.println(jackson);
    System.out.println("********************* END JACKSON JSON ****************************");
生成以下内容:

{“eatwithrustyspoon”:{“URLIST”:null,“设备”:“iPad”,“操作系统”:“iPhone操作系统”,“对等id”:

GSON看起来是这样的:

        Gson gson = new Gson();
    String json = gson.toJson(some_complex_object);

    System.out.println("********************* START GSON JSON ****************************");
    System.out.println(json);
    System.out.println("********************* END GSON JSON ****************************");
它生成了这个(这就是我想要的-注意“urlList”:null没有生成):

{“eatwithrustyspoon”:{“设备”:“iPad”,“操作系统”:“iPhone操作系统”,“对等id”

来自: 我可以省略对具有空值的Bean属性的写入吗?(“如何防止写入空属性”,“如何抑制空值”)

是的。根据,您可以使用:

  objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
  // or (for older versions):
  objectMapper.configure(SerializationConfig.WRITE_NULL_PROPERTIES, false);

瞧,没有更多的空值。请注意,您必须在序列化bean之前配置映射器,因为此设置可能会与序列化程序一起缓存。因此,如果设置得太晚,可能会阻止更改生效。

以下解决方案救了我一命

  objectMapper.setSerializationInclusion(Include.NON_NULL);

我的问题有点不同,实际上我得到的是POJO类属性的空值

但是,我通过如下方式为pojo类中的属性提供映射来解决问题:

@JsonProperty(“属性名称”)


我想这可能会对某些人有所帮助:)

这对我来说不起作用(一个无法解释的编译时错误),但它给了我一个很好的提示——如果我加上这个:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)在我的可序列化类之上,一切都很好。啊,对不起——一个指向它的链接应该也在那里(编辑),虽然其中一个应该可以工作(您不必注释POJO)。这在全局ObjectMapper级别对我很有帮助。如果我需要在bean/类或字段/属性级别配置它,那么使用JsonInclude似乎是一种可行的方法。