根据第三方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;
}
答案 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
。
为造成困惑的歉意。