在使用 SpringBoot 和 Jackson 实现动态返回嵌套类字段时,可以使用 @JsonView 注解。@JsonView 注解可以定义不同的视图,每个视图可以定义不同的字段,然后在返回结果中指定使用哪个视图。

首先,需要在定义类时,使用 @JsonView 注解定义视图:

public class User {
    public interface SummaryView {}
    public interface DetailView extends SummaryView {}

    @JsonView(SummaryView.class)
    private String name;

    @JsonView(DetailView.class)
    private int age;

    // getters and setters
}

上面的代码中,User 类定义了两个视图:SummaryView 和 DetailView。SummaryView 视图只包含 name 字段,而 DetailView 视图包含 name 和 age 两个字段。

然后,在控制器中使用 @JsonView 注解指定返回结果使用哪个视图:

@RestController
public class UserController {

    @GetMapping("/users")
    @JsonView(User.SummaryView.class)
    public List<User> getUsers() {
        // ...
    }

    @GetMapping("/users/{id}")
    @JsonView(User.DetailView.class)
    public User getUser(@PathVariable Long id) {
        // ...
    }
}

上面的代码中,getUsers 方法使用了 SummaryView 视图,返回结果只包含 name 字段。getUser 方法使用了 DetailView 视图,返回结果包含 name 和 age 两个字段。

最后,在 SpringBoot 的配置文件中,需要开启 @JsonView 注解的支持:

spring:
  jackson:
    default-property-inclusion: non_null
    serialization:
      default-view-inclusion: true

上面的配置中,default-view-inclusion 属性设置为 true,表示 Jackson 会自动使用默认视图。如果不想使用默认视图,可以将 default-view-inclusion 属性设置为 false,然后在每个控制器方法中手动指定视图。


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

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