定义
@JsonInclude注解的作用是指定实体类在序列化时的策略,在实体类序列化成json的时候在某些策略下,加了该注解的字段不去序列化该字段。例如,返回前端的实体类中如果某个字段为空的话那么就不返回这个字段了。
用法
@JsonInclude注解用在实体类或属性上,可配合如下参数使用
- ALWAYS:表示总是序列化所有属性
- NON_NULL:表示序列化非null属性
- NON_ABSENT:表示序列化非null或者引用类型缺省值,例如java8的Optional类,这个选中通常与Optional一起使用
- NON_EMPTY:表示序列化非Empty的属性,例如空的集合不会被序列化
- NON_DEFAULT:仅包含与POJO属性默认值不同的值
- CUSTOM:由{@link JsonInclude#valueFilter}指定值本身,或由{@link JsonInclude#contentFilter}指定结构化类型的内容,由过滤器对象的equals方法进行序列化,返回true则会被排除,返回false会被序列化
- USE_DEFAULTS:使用默认值
代码示例
示例1:
entity
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private Long id;
private String name;
private Integer sex;
// ... 此处省略gettet setter
}
controller
// ... 省略
@GetMapping("/get")
@ResonseBody
public User get(){
User user = new User();
user.setName("张三");
return user
}
// ... 省略
返回结果
{
"name":"张三"
}
示例2:
entity
public class User {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String username;
private String password;
private Integer age;
}
controller
// ... 省略
@GetMapping("/get")
@ResonseBody
public User get(){
User user = new User();
return user
}
// ... 省略
返回结果
{"password":null,"age":null}
username上面加了这儿注解并且指定为null的时候不序列化,结果里面没有序列化username这个属性。password和age字段没有加属性,正常序列化成功。