[英]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) {}
我有两个问题:
在这两种情况下,响应都是 200 OK。
我试过使用 SecurityContextHolder 没有任何改变。
新代码是:
ServerResponse.ok().body(request.principal()
.map(it -> new FreshStatus(true))
.defaultIfEmpty(new FreshStatus(false)), FreshStatus.class));
如果principal()
方法返回一个空的Mono
, flatMap()
方法将不会被调用并且响应将为空。 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.