有些场景下需要在序列化时忽略某些属性,例如:列表接口仅返回必要的数据,详情接口再返回全部数据,这个时候可以考虑使用json-view库。
安装包
Maven
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>json-view</artifactId>
<version>1.0.1</version>
</dependency>
复制代码
Gradle
implementation("com.monitorjbl:json-view:1.0.1")
复制代码
ObjectMapper增强
代替Springboot默认的ObjectMapper实现
@Configuration
public class BeanConfig {
@Bean
public ObjectMapper getObjectMapper() {
return new ObjectMapper().registerModule(JsonViewModule());
}
}
复制代码
使用
假设有如下的实体类
public class MyObject{
private Long id;
private String name;
private MySmallObject smallObj;
private List<MyBigObject> contains; //expensive list with many entries
//getters and setters and/or builder
}
复制代码
在转化为JSON时希望不包含MyBigObject列表,可以使用如下方法:
import com.monitorjbl.json.JsonView;
import static com.monitorjbl.json.Match.match;
//get a list of the objects
List<MyObject> list = myObjectService.list();
//exclude expensive field
String json = mapper.writeValueAsString(JsonView.with(list).onClass(MyObject.class, match().exclude("contains")));
复制代码