在 Spring Boot 中,可以使用 Jackson 库来实现动态返回字段的需求。具体实现方式如下:

  1. 首先,在实体类中添加注解 @JsonIgnoreProperties(ignoreUnknown = true),表示在反序列化时忽略未知字段。
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private Long id;
    private String name;
    private Integer age;
    // ...
}
  1. 在控制器中添加注解 @JsonView,并定义一个视图接口,用来过滤需要返回的字段。例如,我们定义一个视图接口 UserView,只返回 idname 字段。
@JsonView(UserView.class)
@GetMapping("/users")
public List<User> getUsers() {
    // ...
}
public interface UserView {
    interface Base {}
}
  1. 在实体类的字段上添加注解 @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;
    // ...
}
  1. 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 数据中只包含 idname 字段。如果需要返回其他字段,只需要在实体类中添加对应的 @JsonView 注解即可。


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

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