这可以通过两个独立的部分来解决。
如何将 WebClient 收到的 HTTP 404 响应转换为自定义异常
使用 时,可以从远程服务接收 HTTP 404 响应。默认情况下,所有响应和客户端响应都将转换为 。因此,您可以在 WebFlux 应用程序中直接处理这些异常。WebClient
4xx
5xx
WebClientResponseException
如果您只想将 404 响应转换为自定义异常,可以执行以下操作:
WebClient webClient = //...
webClient.get().uri("/persons/1")
.retrieve()
.onStatus(httpStatus -> HttpStatus.NOT_FOUND.equals(httpStatus),
clientResponse -> Mono.error(new MyCustomException()))
.bodyToMono(...);
这显然是在每个客户端调用的基础上完成的。
您可以通过在以下实例上一劳永逸地设置的 ,以更可重用的方式实现相同的目标:ExchangeFilterFunction
WebClient
WebClient.builder().filter(myExchangeFilterFunction)...
如何处理 WebFlux 应用程序中的自定义异常
使用带有注释的Spring WebFlux,您可以使用带有注释的方法处理异常(请参阅Spring Framework参考文档)。@ExceptionHandler
注意:可以使用 a,但它的级别非常低,因为您将没有高级支持:您需要手动编写带有缓冲区的响应,而无需任何序列化支持。WebExceptionHandler