Spring WebFlux功能端点+ @JsonView如何?

时间:2018-08-22 18:04:47

标签: json spring 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);
    }
}

所以基本上我在问我是否可以将@JsonView与功能端点一起使用,或者是否可以通过其他方式实现我想做的事情。

1 个答案:

答案 0 :(得分:2)

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

public class BookHandler {

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