@JsonInclude,该注解仅在序列化操作时有用,用于控制属性是否应该被序列化。
序列化时只序列化非null字段
1. 实体类
@Data
@JsonInclude(JsonInclude.Include.NON_NULL) //只序列化不为null的属性
public class User {
private Integer id;
private String name;
}
注:
@JsonInclude(JsonInclude.Include.NON_NULL) 也可以加在属性上,
表示如果某个对象的该属性为null,则不会序列化该属性。如:
@Data
public class User {
private Integer id;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String name;
}
2. 接口
@GetMapping
public User getUser(){
User user = new User();
user.setId(1); //没有设置name属性的值,为null
return user;
}
3. 结果
{
"id": 1
}
序列化时只序列化非空字段
1. 实体类
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY) //null、集合数组等没有内容、空字符串等,都不会被序列化
public class User {
private Integer id;
private String name;
private List<String> list = new ArrayList<>();
}
2. 接口
@GetMapping
public List<User> getUser(){
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setId(1);
user1.setName("");
userList.add(user1); //user1的name和list不会被序列化
User user2 = new User();
user2.setId(1);
user2.setName("lalala");
user2.getList().add("user2");
userList.add(user2);
return userList;
}
3. 结果
[
{
"id": 1
},
{
"id": 1,
"name": "lalala",
"list": [
"user2"
]
}
]
其他设置
ALWAYS // 默认策略,任何情况都执行序列化
NON_NULL // 非空
NON_ABSENT // null的不会序列化,但如果类型是AtomicReference,依然会被序列化
NON_EMPTY // null、集合数组等没有内容、空字符串等,都不会被序列化
NON_DEFAULT // 如果字段是默认值,就不会被序列化
CUSTOM // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰的字段是否序列化
USE_DEFAULTS // 当JsonInclude在类和属性上都有时,优先使用属性上的注解,此时如果在序列化的get方法上使用了JsonInclude,并设置为USE_DEFAULTS,就会使用类注解的设置