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. Как я могу это сделать?
В идеале я мог бы проверить, был ли это 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());
}
Ах, я думаю, чего мне не хватало в моем понимании, так это того, как он проваливается в цепочку. Спасибо за ответ