SpringBoot返回数据时动态忽略某些属性

287 阅读1分钟

有些场景下需要在序列化时忽略某些属性,例如:列表接口仅返回必要的数据,详情接口再返回全部数据,这个时候可以考虑使用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")));