springboot 根据需求动态返回字段实现
在 Spring Boot 中,可以使用 Jackson 库来实现动态返回字段的需求。具体实现方式如下:
- 首先,在实体类中添加注解
@JsonIgnoreProperties(ignoreUnknown = true),表示在反序列化时忽略未知字段。
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private Long id;
private String name;
private Integer age;
// ...
}
- 在控制器中添加注解
@JsonView,并定义一个视图接口,用来过滤需要返回的字段。例如,我们定义一个视图接口UserView,只返回id和name字段。
@JsonView(UserView.class)
@GetMapping("/users")
public List<User> getUsers() {
// ...
}
public interface UserView {
interface Base {}
}
- 在实体类的字段上添加注解
@JsonView(UserView.Base.class),表示该字段属于Base视图,需要在getUsers()方法中返回。
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
@JsonView(UserView.Base.class)
private Long id;
@JsonView(UserView.Base.class)
private String name;
@JsonView(UserView.class)
private Integer age;
// ...
}
- 在
getUsers()方法中,调用JsonView.with()方法,指定要返回的视图接口UserView.Base.class,然后返回实体类列表即可。
@JsonView(UserView.class)
@GetMapping("/users")
public List<User> getUsers() {
List<User> users = userService.getUsers();
return JsonView.with(users).onClass(User.class, UserView.Base.class).returnValue();
}
这样,返回的 JSON 数据中只包含 id 和 name 字段。如果需要返回其他字段,只需要在实体类中添加对应的 @JsonView 注解即可。
原文地址: https://www.cveoy.top/t/topic/bf84 著作权归作者所有。请勿转载和采集!