如何处理基于 spring-webflux 的 REST 服务中的异常

Tho*_*mas 0 exception-handling spring-webflux

我正在使用 spring-webflux 构建 REST 服务。当找不到请求的路径或发生任何其他内部服务器错误时,我需要使用自定义 json 错误响应进行响应。

我有一个GeneralExceptionHandler实现ErrorWebExceptionHandler.

我有一个豆子GeneralExceptionHandler如下。

@Bean
@Order(-2)
public ErrorWebExceptionHandler errorWebExceptionHandler() {
    return new GeneralExceptionHandler();
}
Run Code Online (Sandbox Code Playgroud)

这样我的句柄方法 ( public Mono<Void> handle(ServerWebExchange serverWebExchange, Throwable throwable)) inGeneralExceptionHandler就会在出现诸如未找到请求的路径之类的错误时调用。

而且我还可以使用以下内容发送自定义 http 状态代码。

serverWebExchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);

但我不知道如何发送自定义 JSON 作为响应。

首先,这是处理 Spring webflux 中一般错误的正确方法吗?如果是,我该如何响应自定义 JSON 对象?

Bri*_*zel 5

Spring BootErrorWebExceptionHandler为此目的提供了该接口;它WebExceptionHandler从 Spring Framework扩展了相当普遍的低级别。

使用WebExceptionHandler,您确实无法处理低级概念,因为它是一种通用的错误处理机制。

Spring Boot中自定义错误处理流程的方式有以下几种:

  • 创建您自己的ErrorAttributesbean 并从提供给 HTML 视图或呈现为 JSON 的错误映射中添加/删除数据
  • 如果您想更多地处理错误处理,您可以扩展AbstractErrorWebExceptionHandler,它为您提供呈现 HTML/响应正文的所有构建块
  • 如果你想要完全控制,你可以实现一个ErrorWebExceptionHandler,但你必须有类似的基础设施设置来呈现高级概念,例如视图或序列化响应主体