【问题标题】:Spring WebFlux Functional Endpoints + @JsonView how?Spring WebFlux 功能端点 + @JsonView 怎么样?
【发布时间】:2019-01-29 01:27:34
【问题描述】:

我正在使用带有功能端点的 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 与功能端点一起使用,或者是否有任何其他方式可以实现我想做的事情。

【问题讨论】:

    标签: json spring hibernate jackson spring-webflux


    【解决方案1】:

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

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

    【讨论】:

    • 你知道如何让它充满活力吗?我的意思是用户角色(反应弹簧安全)
    • @nekperu15739 您是否能够找到一种方法来使用 Spring Security 中的角色使其动态化?
    • 嗨@a.developer,是的,正如塞巴斯蒂安提到的那样,我做了,只需要填充提示
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-01-17
    • 2021-12-17
    • 2019-08-15
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多