Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 响应为Jackson的自定义JSON字段_Java_Json_Spring_Rest - Fatal编程技术网

Java 响应为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注释,以便在接收或发送时忽

我用Spring Boot创建了一些RESTful WS,其中一个端点的方法返回某个类的实例,然后使用嵌入式Jackson库将其转换为JSON。Jackson将每个字段转换为JSON,即使某些字段为空。因此,在输出中,它将如下所示:

{
    "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)