Я пытаюсь вернуть 404, когда Flux пуст, как здесь: Функциональность WebFlux: как обнаружить пустой Flux и вернуть 404?
Моя главная проблема заключается в том, чтоКогда вы проверяете, есть ли у потока элементы, он выделяет это значение, а вы его теряете.И когда я пытаюсь использовать переключатель, если он пуст в ответе сервера, он никогда не вызывается (я тайно думаю, что это потому, что Mono не пуст, только тело пусто).
Некоторый код того, что я делаю(У меня есть фильтр в моем классе маршрутизатора, проверяющий наличие DataNotFoundException для возврата notFound):
Flux<Location> response = this.locationService.searchLocations(searchFields, pageToken);
return ok()
.contentType(APPLICATION_STREAM_JSON)
.body(response, Location.class)
.switchIfEmpty(Mono.error(new DataNotFoundException("The data you seek is not here.")));
^ Это никогда не вызывает switchIfEmpty
Flux<Location> response = this.locationService.searchLocations(searchFields, pageToken);
return response.hasElements().flatMap(l ->{
if(l){
return ok()
.contentType(APPLICATION_STREAM_JSON)
.body(response, Location.class);
}
else{
return Mono.error(new DataNotFoundException("The data you seek is not here."));
}
});
^ Это теряет испущенный элемент на hasElements.
Есть ли способ восстановить испущенный элемент в hasElements или заставить switchIfEmpty только проверять содержимое тела?