springboot jackson 实现动态返回类字段
Spring Boot的Jackson库提供了一种动态返回类字段的方式,可以根据请求参数来决定返回哪些字段。具体实现步骤如下:
- 在需要动态返回字段的类上添加注解
@JsonFilter,并指定过滤器名字,例如:
@JsonFilter("myFilter")
public class User {
private Long id;
private String name;
private String phone;
// getters and setters
}
- 在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;
}
}
}
- 在请求参数中添加
fields参数,值为需要返回的字段名,多个字段用逗号分隔。例如,发送GET请求/users?fields=id,name将返回User类中的id和name字段。
参考资料:
Spring Boot + Jackson: Dynamically filter JSON properties based on a request parameter
原文地址: https://www.cveoy.top/t/topic/bf9w 著作权归作者所有。请勿转载和采集!