ObjectMapper-如何在JSON中发送空值

时间:2018-12-16 10:40:59

标签: java json null objectmapper

根据第三方API规范,如果不存在值,我需要使用ObjectMapper在JSON中发送空值,

预期结果:"optional": null

如果存在可选值,则发送"optional": "value"

我在Jackson – Working with Maps and nulls中找不到这样的选项

代码:

requestVO = new RequestVO(optional);
ObjectMapper mapper = new ObjectMapper();
String requestString = mapper.writeValueAsString(requestVO);

班级:

public class RequestVO {
   String optional;
   public RequestVO(String optional) {
      this.optional = optional;
   }

public String getOptional() {
    return optional;
}

public void setOptional(String optional) {
    this.optional= optional;
}

2 个答案:

答案 0 :(得分:2)

向您的班级添加@JsonInclude(JsonInclude.Include.USE_DEFAULTS)注释。

@JsonInclude(JsonInclude.Include.USE_DEFAULTS)
class RequestVO {
    String optional;

    public RequestVO(String optional) {
        this.optional = optional;
    }

    public String getOptional() {
        return optional;
    }

    public void setOptional(String optional) {
        this.optional = optional;
    }
}

示例:

RequestVO requestVO = new RequestVO(null);

ObjectMapper mapper = new ObjectMapper();
try {
    String requestString = mapper.writeValueAsString(requestVO);
    System.out.println(requestString);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

输出:

{"optional":null}

带有值:

RequestVO requestVO = new RequestVO("test");

ObjectMapper mapper = new ObjectMapper();
try {
    String requestString = mapper.writeValueAsString(requestVO);
    System.out.println(requestString);
} catch (JsonProcessingException e) {
    e.printStackTrace();
}

输出:

{"optional":"test"}

您甚至可以在属性上使用@JsonInclude注释。因此,通过这种方式,您可以序列化为null或在序列化时忽略某些属性。

答案 1 :(得分:1)

您可以通过以下方式配置ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

如果JSON请求中不存在任何值,则您处理的内容将具有您期望的null

如果需要,您甚至可以为Spring配置一个ObjectMapper bean。

编辑:

我误解了这个问题,他对JSON响应而不是对解析的对象感兴趣。 在这种情况下,正确的属性是JsonInclude.Include.USE_DEFAULTS

为造成困惑的歉意。