spring webflux switchiffempty返回不同的类型

ruoxqz4g  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(428)
public Mono<ServerResponse> getMessage(ServerRequest request) {
    //this call returns Mono<ApiClientResponse>
    return apiClient.hystrixWrappedGetMessages(request.headers().asHttpHeaders(), request.queryParams())
            .switchIfEmpty(/* Here */)
}

请原谅,代码有点不完整,当我遇到这个问题时,我正在重新构造它。要点是它在 switchIfEmpty() 调用时,编译器正在强制 Mono<ApiClientResponse> ,但是什么时候 hystrixWrappedGetMessages() 退货 Mono.empty() 我想退回204 Mono<ServerResponse> 例如,否则我想返回一个200。我怎样才能做到呢?
理想情况下,我可以在map调用中检查它是否是mono.empty(),但如果它是空的mono,它似乎不会进入map。考虑过使用可选的,但他们似乎不能很好地发挥monos。

gopyfrb3

gopyfrb31#

你应该能够 flatMap 你的React是否良好,如果 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());
}

相关问题