提问者:小点点

Spring Webflux ServerResponse为空


对于这个简单的代码,我一直在为这个简单的问题绞尽脑汁:

@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) {}

我有两个问题:

    < li >如果没有经过身份验证,则不调用flatMap中的代码,尽管我的。or子句 < li >当认证时,调用平面图代码,但是服务器响应为空。

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

我尝试使用SecurityContextHolder没有任何变化。


共1个答案

匿名用户

如果主体()方法返回一个空的Mono,则不会调用平面地图()方法并且响应将为空。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);
            }));