Spring Boot的Jackson库提供了一种动态返回类字段的方式,可以根据请求参数来决定返回哪些字段。具体实现步骤如下:

  1. 在需要动态返回字段的类上添加注解@JsonFilter,并指定过滤器名字,例如:
@JsonFilter("myFilter")
public class User {
    private Long id;
    private String name;
    private String phone;
    // getters and setters
}
  1. 在Controller方法中获取ObjectMapper对象,然后使用ObjectMapper.setFilterProvider()方法设置过滤器提供者。过滤器提供者需要实现FilterProvider接口,Spring Boot提供了一个默认的实现类SimpleFilterProvider,可以直接使用。
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getUsers(@RequestParam(required = false) String fields) {
        List<User> users = userService.getUsers();
        if (fields != null) {
            ObjectMapper objectMapper = new ObjectMapper();
            SimpleFilterProvider filterProvider = new SimpleFilterProvider();
            filterProvider.addFilter("myFilter", SimpleBeanPropertyFilter.filterOutAllExcept(fields.split(",")));
            objectMapper.setFilterProvider(filterProvider);
            return objectMapper.convertValue(users, new TypeReference<List<User>>() {});
        } else {
            return users;
        }
    }
}
  1. 在请求参数中添加fields参数,值为需要返回的字段名,多个字段用逗号分隔。例如,发送GET请求/users?fields=id,name将返回User类中的idname字段。

参考资料:

Spring Boot + Jackson: Dynamically filter JSON properties based on a request parameter

springboot jackson 实现动态返回类字段

原文地址: https://www.cveoy.top/t/topic/bf9w 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录