对于这个简单的代码,我一直在为这个简单的问题绞尽脑汁:
@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) {}
我有两个问题:
在这两种情况下,响应都是 200 OK。
我尝试使用SecurityContextHolder没有任何变化。
如果主体()
方法返回一个空的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);
}));