如何在基于Spring-Webflux的REST服务中处理异常

时间:2018-09-03 14:11:59

标签: exception-handling spring-webflux

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

我有一个实现GeneralExceptionHandler的{​​{1}}类。

我有一个ErrorWebExceptionHandler的bean,如下所示。

GeneralExceptionHandler

这样,如果找不到诸如请求的路径之类的错误,则会调用@Bean @Order(-2) public ErrorWebExceptionHandler errorWebExceptionHandler() { return new GeneralExceptionHandler(); } 中的handle方法(public Mono<Void> handle(ServerWebExchange serverWebExchange, Throwable throwable))。

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

GeneralExceptionHandler

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

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

1 个答案:

答案 0 :(得分:2)

Spring Boot为此提供了ErrorWebExceptionHandler接口;它扩展了Spring框架中相当普通的低级{​​{1}}。

使用WebExceptionHandler确实使您陷入了低级概念的困境,因为它是一种常规的错误处理机制。

有几种方法可以在Spring Boot中自定义错误处理过程:

  • 创建您自己的WebExceptionHandler bean,并从错误映射中添加/删除数据(这些错误映射已提供给HTML视图或呈现为JSON)
  • 如果您想进一步处理错误处理,可以扩展ErrorAttributes,它为您提供了呈现HTML /响应正文的所有构建模块
  • 如果要完全控制,可以实现AbstractErrorWebExceptionHandler,但是必须具有类似的基础结构设置才能呈现高级概念,例如视图或序列化响应正文