Exception handling 如何在基于SpringWebFlux的REST服务中处理异常
我正在使用SpringWebFlux构建一个REST服务。当找不到请求的路径或发生任何其他内部服务器错误时,我需要使用自定义json错误响应进行响应 我有一个Exception handling 如何在基于SpringWebFlux的REST服务中处理异常,exception-handling,spring-webflux,Exception Handling,Spring Webflux,我正在使用SpringWebFlux构建一个REST服务。当找不到请求的路径或发生任何其他内部服务器错误时,我需要使用自定义json错误响应进行响应 我有一个GeneralExceptionHandler类,它实现了ErrorWebExceptionHandler 我有一个用于GeneralExceptionHandler的bean,如下所示 @Bean @Order(-2) public ErrorWebExceptionHandler errorWebExceptionHandler() {
GeneralExceptionHandler
类,它实现了ErrorWebExceptionHandler
我有一个用于GeneralExceptionHandler
的bean,如下所示
@Bean
@Order(-2)
public ErrorWebExceptionHandler errorWebExceptionHandler() {
return new GeneralExceptionHandler();
}
这样,在出现诸如未找到请求的路径之类的错误时,将调用GeneralExceptionHandler
中的我的句柄方法(public Mono handle(ServerWebExchange ServerWebExchange,Throwable Throwable)
)
我还可以使用下面的代码发送自定义http状态代码
serverWebExchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR)代码>
但我不知道如何发送自定义JSON作为响应
首先,这是处理SpringWebFlux中一般错误的正确方法吗?如果是,如何使用自定义JSON对象进行响应 Spring Boot为此提供了ErrorWebExceptionHandler
接口;它扩展了Spring框架中相当通用的低级WebExceptionHandler
使用WebExceptionHandler
,您确实无法处理低级概念,因为它是一种通用的错误处理机制
有几种方法可以自定义Spring Boot中的错误处理过程:
- 创建您自己的
ErrorAttributes
bean,并从提供给HTML视图或呈现为JSON的错误映射中添加/删除数据
- 如果您想进一步处理错误处理,可以扩展
AbstractErrorWebExceptionHandler
,它提供了呈现HTML/响应主体的所有构建块
- 如果您想要完全控制,您可以实现一个
ErrorWebExceptionHandler
,但是您必须有类似的基础设施设置,以呈现高级概念,例如视图或序列化响应主体
Spring Boot为此提供了
ErrorWebExceptionHandler
接口;它扩展了Spring框架中相当通用的低级WebExceptionHandler
使用WebExceptionHandler
,您确实无法处理低级概念,因为它是一种通用的错误处理机制
有几种方法可以自定义Spring Boot中的错误处理过程:
- 创建您自己的
ErrorAttributes
bean,并从提供给HTML视图或呈现为JSON的错误映射中添加/删除数据
- 如果您想进一步处理错误处理,可以扩展
AbstractErrorWebExceptionHandler
,它提供了呈现HTML/响应主体的所有构建块
- 如果您想要完全控制,您可以实现一个
ErrorWebExceptionHandler
,但是您必须有类似的基础设施设置,以呈现高级概念,例如视图或序列化响应主体
您是否使用Spring Boot?Spring MVC和Spring Webflux中都有许多错误处理方法。我有一个答案,我使用全局控制器建议来处理应用程序错误并返回自定义响应。你可以查看我的答案:。@BrianClozelyes@nghiaht您的答案对应用程序错误有帮助,但对404和405错误不起作用。@Thomas在我的示例中,我通过返回HTTP 200响应(带有错误代码和消息)来处理所有错误。但是您可以返回任何HTTP状态,例如我返回401 Unauthorizereturn ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(新的错误响应(例如getCode(),例如getMessage())代码>使用您想要的任何HttpStatus,您可以在抛出它之前将状态设置为exception,并在ControllerAdvice中使用它。您使用Spring Boot吗?Spring MVC和Spring Webflux中都有许多错误处理方法。我有一个答案,我使用全局控制器建议来处理应用程序错误并返回自定义响应。你可以查看我的答案:。@BrianClozelyes@nghiaht您的答案对应用程序错误有帮助,但对404和405错误不起作用。@Thomas在我的示例中,我通过返回HTTP 200响应(带有错误代码和消息)来处理所有错误。但是您可以返回任何HTTP状态,例如我返回401 Unauthorizereturn ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(新的错误响应(例如getCode(),例如getMessage())代码>使用您想要的任何HttpStatus,您可以在抛出它之前将状态设置为exception,并在ControllerAdvice中使用它。