springboot jackson 实现动态返回嵌套类字段
在使用 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 著作权归作者所有。请勿转载和采集!