У меня есть конечная точка, которая принимает параметр id и отправляет api продукта для удаления. productService.delete также возвращает Mono. Проблема в том, что когда метод productService.delete возвращает моно-ошибку, конечная точка всегда отвечает http 200. И я могу видеть журнал ошибок об этой моно-ошибке, но мой метод обработчика отвечает http 200.
У меня есть AbstractErrorWebExceptionHandler для обработчика исключение в моем api. Но обработчик ошибок не может справиться с этой проблемой из-за Mono. Когда в нисходящем потоке возникают исключения, Spring webflux должен знать об этой ошибке и не отвечает HTTP 200.
public Mono<ServerResponse> deleteProduct(ServerRequest request) {
String id = request.pathVariable("id");
Mono<Product> productMono = this.repository.findById(id);
return productMono
.flatMap(existingProduct ->
ServerResponse.noContent()
.build(productService.delete(existingProduct))
);
}
Кстати, в исходном коде говорится, что ответ будет зафиксирован, когда данный издатель завершит работу. Но как насчет полной ошибки? Я думаю, что Spring webflux не проверяет, является ли это сигналом ошибки или нет. Просто проверьте, завершается ли моно или нет.
* Build the response entity with no body.
* The response will be committed when the given {@code voidPublisher} completes.
* @param voidPublisher publisher publisher to indicate when the response should be committed
* @return the built response
*/
Mono<ServerResponse> build(Publisher<Void> voidPublisher);
Заранее благодарю