Spring WebFlux switchIfEmpty 到 return 不同类型
Spring WebFlux switchIfEmpty to return different type
public Mono<ServerResponse> getMessage(ServerRequest request) {
//this call returns Mono<ApiClientResponse>
return apiClient.hystrixWrappedGetMessages(request.headers().asHttpHeaders(), request.queryParams())
.switchIfEmpty(/* Here */)
}
请原谅我的代码有点不完整,当我运行进入这个问题时,我正在重组它。要点是它在 switchIfEmpty()
调用中说 /* Here */ 的地方,编译器强制使用 Mono<ApiClientResponse>
类型,但是当 hystrixWrappedGetMessages()
returns Mono.empty()
例如,我想通过 returning a 204 Mono<ServerResponse>
来处理这个问题,否则我想 return a 200。我怎样才能做到这一点?
理想情况下,我可以在地图调用中检查它是否是 Mono.empty(),但如果它是一个空的 Mono,它似乎不会进入地图。考虑过使用可选值,但它们似乎不能很好地与 Monos 一起使用。
你应该能够flatMap
你的回应,如果好的,如果返回 Mono#empty
,flatMap
将被忽略。
public Mono<ServerResponse> getMessage(ServerRequest request) {
return apiClient.hystrixWrappedGetMessages(request.headers().asHttpHeaders(), request.queryParams())
.flatMap(response -> {
// Do your processing here
return ServerResponse.ok().body( .... );
}.switchIfEmpty(ServerResponse.noContent());
}
public Mono<ServerResponse> getMessage(ServerRequest request) {
//this call returns Mono<ApiClientResponse>
return apiClient.hystrixWrappedGetMessages(request.headers().asHttpHeaders(), request.queryParams())
.switchIfEmpty(/* Here */)
}
请原谅我的代码有点不完整,当我运行进入这个问题时,我正在重组它。要点是它在 switchIfEmpty()
调用中说 /* Here */ 的地方,编译器强制使用 Mono<ApiClientResponse>
类型,但是当 hystrixWrappedGetMessages()
returns Mono.empty()
例如,我想通过 returning a 204 Mono<ServerResponse>
来处理这个问题,否则我想 return a 200。我怎样才能做到这一点?
理想情况下,我可以在地图调用中检查它是否是 Mono.empty(),但如果它是一个空的 Mono,它似乎不会进入地图。考虑过使用可选值,但它们似乎不能很好地与 Monos 一起使用。
你应该能够flatMap
你的回应,如果好的,如果返回 Mono#empty
,flatMap
将被忽略。
public Mono<ServerResponse> getMessage(ServerRequest request) {
return apiClient.hystrixWrappedGetMessages(request.headers().asHttpHeaders(), request.queryParams())
.flatMap(response -> {
// Do your processing here
return ServerResponse.ok().body( .... );
}.switchIfEmpty(ServerResponse.noContent());
}