实体类未设置字段如何不参与转化json?
引言
开发实践中经常碰到,base请求中字段过多,但是子类请求不需要用到base请求字段,并且要求未设置字段不参与转化成JSON,那么可以用到以下工具
实践
使用 Jackson
Jackson 是一个广泛使用的 Java JSON 处理库,Spring Boot 默认使用它来处理 JSON 数据。你可以通过 @JsonInclude
注解来控制哪些字段会被序列化到 JSON 中。
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
// 设置实体类中为 null 的字段不参与序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("John");
// age 字段未设置
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json);
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
:此注解加在实体类上,表明当字段的值为null
时,该字段不会被序列化为 JSON。ObjectMapper
:用于将 Java 对象转换为 JSON 字符串的核心类。writeValueAsString
方法能把User
对象转换为 JSON 字符串。
使用 Gson
Gson 是 Google 开发的一个简单易用的 Java JSON 处理库。可以通过配置 Gson
对象来排除值为 null
的字段。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public static void main(String[] args) {
User user = new User();
user.setName("John");
// age 字段未设置
Gson gson = new GsonBuilder().serializeNulls(false).create();
String json = gson.toJson(user);
System.out.println(json);
}
}
GsonBuilder().serializeNulls(false)
:构建Gson
对象时,调用serializeNulls(false)
方法,这样在序列化时就会忽略值为null
的字段。gson.toJson(user)
:把User
对象转换为 JSON 字符串。