Spring WebFlux 功能端点 + @JsonView 怎么样?

dba*_*bar 5 spring json hibernate jackson spring-webflux

我正在使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我问是否有任何已知的方法可以将 @JsonView 与功能端点一起使用,或者是否有任何其他方法可以实现我想做的事情。

Séb*_*uze 3

您可以使用序列化提示指定 JSON 视图,如下所示:

public class BookHandler {

    public Mono<ServerResponse> getBook(ServerRequest request) {
        return ServerResponse
                .ok()
                .hint(Jackson2CodecSupport.JSON_VIEW_HINT, MyJacksonView.class)
                .body(...);
    }
}
Run Code Online (Sandbox Code Playgroud)