Java
[Java] Jackson json에 null 필드 제외하기
Jane Kwon
2023. 2. 17. 10:41
반응형
Object를 json으로 직렬화할 때 null 값은 포함되지 않도록 하고 싶었다.
객체에 @JsonInclude 어노테이션을 걸어
null 값이 아닌 경우만 포함하도록 해주었지만
클래스에도 필드에도 다 먹히질 않는다.
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Payload {
private String templateCode;
private List<Attribute> attributes;
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<FailoverConfig> failoverConfigs;
public String getTemplateCode() {
return templateCode;
}
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}
public List<Attribute> getAttributes() {
return attributes;
}
public void setAttributes(List<Attribute> attributes) {
this.attributes = attributes;
}
public List<FailoverConfig> getFailoverConfigs() {
return failoverConfigs;
}
public void setFailoverConfigs(List<FailoverConfig> failoverConfigs) {
this.failoverConfigs = failoverConfigs;
}
}
Jackson 2 이하 버전에선 @JsonSerialize 어노테이션을 사용해야 한다길래 해봤는데 이것도 실패!
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class Payload {
private String templateCode;
private List<Attribute> attributes;
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
private List<FailoverConfig> failoverConfigs;
public String getTemplateCode() {
return templateCode;
}
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}
public List<Attribute> getAttributes() {
return attributes;
}
public void setAttributes(List<Attribute> attributes) {
this.attributes = attributes;
}
public List<FailoverConfig> getFailoverConfigs() {
return failoverConfigs;
}
public void setFailoverConfigs(List<FailoverConfig> failoverConfigs) {
this.failoverConfigs = failoverConfigs;
}
}
안되겠다 매퍼에 설정을 해봐야겠다. 이래도 안먹힌다.
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
String json = mapper.writeValueAsString(payload);
또 문제는 버전이었다. Jackson 버전 2.5 이하에서는 아래처럼 설정해줘야 먹힌다고 한다.
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
String json = mapper.writeValueAsString(payload);
반응형