我有一些使用Spring Boot创建的RESTful WS,并且某些端点的方法之一返回某个类的实例,然后将使用嵌入式Jackson库将其转换为JSON。即使某些字段为空,Jackson也会将每个字段转换为JSON。因此,在输出中它将如下所示:
WebEngineScript
在某些情况下,我想忽略某些字段的输出。在某些情况下,并非每次都这样。怎么做?
答案 0 :(得分:3)
要使用Jackson> 2.0抑制具有空值的序列化属性,可以直接配置ObjectMapper,或使用@JsonInclude
批注:
mapper.setSerializationInclusion(Include.NON_NULL);
或:
@JsonInclude(Include.NON_NULL)
class Foo
{
String field1;
String field2;
String field3;
}
或者,您可以在getter中使用@JsonInclude,以便在值不为null时显示属性。
获得答案 1 :(得分:1)
要排除空值,可以使用
@JsonInclude(value = Include.NON_NULL)
public class YourClass {
}
要包含自定义值,您可以使用
public class Employee {
private String name;
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = DateOfBirthFilter.class)
private Date dateOfBirth;
@JsonInclude(content = JsonInclude.Include.CUSTOM, contentFilter = PhoneFilter.class)
private Map<String, String> phones;
}
public class DateOfBirthFilter {
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Date)) {
return false;
}
//date should be in the past
Date date = (Date) obj;
return !date.before(new Date());
}
}
public class PhoneFilter {
private static Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof String)) {
return false;
}
//phone must match the regex pattern
return !phonePattern.matcher(obj.toString()).matches();
}
}
取自https://www.logicbig.com/tutorials/misc/jackson/json-include-customized.html的参考
答案 2 :(得分:0)
在类的顶部,添加NON_NULL Jackson批注,以在接收或发送时忽略空值
@JsonInclude(value = Include.NON_NULL)
public class SomeClass {
}