我有一个端点,它接受 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);
先感谢您。