我正在使用带有功能端点的Spring Boot 2.0.4 WebFlux。
我想在GET / books和GET / books / {id}中返回不同的模型。前者是简短模型,后者是完整模型。
我可以使用@JsonIgnore从JSON序列化中筛选出属性,但这会从使用此模型的所有响应中删除任何特定字段。
Jackson提供了@JsonView作为对此的解决方案,但该解决方案仅与带注释的控制器兼容,并且我正在使用如下功能端点:
@Configuration
public class BookRouter {
@Bean
public RouterFunction<ServerResponse> routeBooks(BookHandler bookHandler) {
return RouterFunctions
.route(RequestPredicates.GET("/books")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), bookHandler::getBooks)
.andRoute(RequestPredicates.GET("/books/{id}")
.and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), bookHandler::getBook);
}
}
所以基本上我在问我是否可以将@JsonView与功能端点一起使用,或者是否可以通过其他方式实现我想做的事情。
答案 0 :(得分:2)
您可以使用以下序列化提示来指定JSON视图:
public class BookHandler {
public Mono<ServerResponse> getBook(ServerRequest request) {
return ServerResponse
.ok()
.hint(Jackson2CodecSupport.JSON_VIEW_HINT, MyJacksonView.class)
.body(...);
}
}