Java 响应为Jackson的自定义JSON字段
我用Spring Boot创建了一些RESTful WS,其中一个端点的方法返回某个类的实例,然后使用嵌入式Jackson库将其转换为JSON。Jackson将每个字段转换为JSON,即使某些字段为空。因此,在输出中,它将如下所示:Java 响应为Jackson的自定义JSON字段,java,json,spring,rest,Java,Json,Spring,Rest,我用Spring Boot创建了一些RESTful WS,其中一个端点的方法返回某个类的实例,然后使用嵌入式Jackson库将其转换为JSON。Jackson将每个字段转换为JSON,即使某些字段为空。因此,在输出中,它将如下所示: { "field1": "res1", "field2": "res2", "field3": null } 我想在特定情况下忽略输出中的某些字段。不是每次,在某些情况下。如何操作?在类的顶部添加非空Jackson注释,以便在接收或发送时忽
{
"field1": "res1",
"field2": "res2",
"field3": null
}
我想在特定情况下忽略输出中的某些字段。不是每次,在某些情况下。如何操作?在类的顶部添加非空Jackson注释,以便在接收或发送时忽略空值
@JsonInclude(value = Include.NON_NULL)
public class SomeClass {
}
在类的顶部添加非空的Jackson注释,以便在接收或发送时忽略空值
@JsonInclude(value = Include.NON_NULL)
public class SomeClass {
}
要使用Jackson>2.0禁止使用空值序列化属性,可以直接配置ObjectMapper,或使用
@JsonInclude
注释:
mapper.setSerializationInclusion(Include.NON_NULL);
或:
或者,您可以在getter中使用@JsonInclude,以便在值不为null时显示属性
完整示例可从获得要使用Jackson>2.0禁止使用空值序列化属性,您可以直接配置ObjectMapper,或使用
@JsonInclude
注释:
mapper.setSerializationInclusion(Include.NON_NULL);
或:
或者,您可以在getter中使用@JsonInclude,以便在值不为null时显示属性
完整示例可在上找到,以排除您可以使用的空值
@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();
}
}
公共类员工{
私有字符串名称;
@JsonInclude(value=JsonInclude.Include.CUSTOM,valueFilter=DateOfBirthFilter.class)
私人出生日期;
@JsonInclude(content=JsonInclude.Include.CUSTOM,contentFilter=PhoneFilter.class)
私人地图电话;
}
公共类DateOfBirthFilter{
@凌驾
公共布尔等于(对象obj){
if(obj==null | |!(obj instanceof Date)){
返回false;
}
//日期应该在过去
日期=(日期)obj;
return!date.before(new date());
}
}
公共类电话过滤器{
私有静态模式phonePattern=Pattern.compile(\\d{3}-\\d{3}-\\d{4});
@凌驾
公共布尔等于(对象obj){
if(obj==null | |!(obj instanceof String)){
返回false;
}
//手机必须与regex模式匹配
return!phonePattern.matcher(obj.toString()).matches();
}
}
引用以排除可以使用的空值
@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();
}
}
公共类员工{
私有字符串名称;
@JsonInclude(value=JsonInclude.Include.CUSTOM,valueFilter=DateOfBirthFilter.class)
私人出生日期;
@JsonInclude(content=JsonInclude.Include.CUSTOM,contentFilter=PhoneFilter.class)
私人地图电话;
}
公共类DateOfBirthFilter{
@凌驾
公共布尔等于(对象obj){
if(obj==null | |!(obj instanceof Date)){
返回false;
}
//日期应该在过去
日期=(日期)obj;
return!date.before(new date());
}
}
公共类电话过滤器{
私有静态模式phonePattern=Pattern.compile(\\d{3}-\\d{3}-\\d{4});
@凌驾
公共布尔等于(对象obj){
if(obj==null | |!(obj instanceof String)){
返回false;
}
//手机必须与regex模式匹配
return!phonePattern.matcher(obj.toString()).matches();
}
}
从类上的put@JsonInclude(Include.NON\u NULL)
引用类上的put@JsonInclude(Include.NON\u NULL)