繁体   English   中英

Spring Webflux ServerResponse 为空白

[英]Spring Webflux ServerResponse is blank

我一直在为这个简单的代码解决这个简单的问题:

@Bean
public RouterFunction<ServerResponse> refresh() {
    return route(GET("/api/refresh"), (request) ->
            request.principal().or(Mono.empty()).flatMap((it) -> {
                System.out.println(it);

                return ServerResponse.ok().body(Mono.just(new FreshStatus(true)), FreshStatus.class);
            }));
}

record FreshStatus(boolean isFresh) {}

我有两个问题:

  • 未通过身份验证时,不调用 flatMap 中的代码,尽管有 my.or 子句
  • 通过身份验证后,将调用 flatMap 代码,但服务器响应只是空白。

在这两种情况下,响应都是 200 OK。

我试过使用 SecurityContextHolder 没有任何改变。

新代码是:

            ServerResponse.ok().body(request.principal()
                    .map(it -> new FreshStatus(true))
                    .defaultIfEmpty(new FreshStatus(false)), FreshStatus.class));

如果principal()方法返回一个空的MonoflatMap()方法将不会被调用并且响应将为空。 Mono.empty()将返回一个 Mono 完成而不发出任何项目。

您可以尝试使用defaultIfEmpty()方法。

不确定这是否是您想要的,但类似于:

return route(GET("/api/refresh"), (request) ->
            request.principal().defaultIfEmpty(new FreshStatus(false))
            .flatMap((it) -> {
                System.out.println(it);

                return ServerResponse.ok().body(Mono.just(it), FreshStatus.class);
            }));

顺便说一句,Josh Bloch 声称在大多数情况下,最好使用枚举而不是 boolean。我倾向于同意。 这可能与您的FreshStatus记录相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM