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#emptyflatMap 将被忽略。

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());
}