在spring中,我们可以使用注释@ExceptionHandler来处理服务器和控制器的客户端错误。
我尝试过在web流量控制器中使用这个注释,但经过一些调查后,我发现了这里。
Spring反应性的情况要复杂得多。由于响应流是由与执行控制器方法的线程不同的线程计算的,因此异常不会自动传播到控制器线程。这意味着@ExceptionHandler方法只适用于直接处理请求的线程中引发的异常。如果要使用@ExceptionHandler特性,则必须将流中抛出的异常传播回线程。这似乎有点令人失望,但在编写本文时,Spring 5仍未发布,因此错误处理可能会变得更好。
因此,我的问题是如何将异常传播回线程。有关于使用@ExceptionHandler和Spring流量的好示例或文章吗?
更新:从spring.io看,它看起来是受支持的,但仍然缺乏一般的理解
谢谢,
发布于 2021-02-09 22:18:28
现在可以在Spring中使用@ExceptionHandler以及@RestControllerAdvice甚至@ControllerAdvice。
示例:
此处提取的示例:
https://ddcode.net/2019/06/21/spring-5-webflux-exception-handling/
发布于 2018-06-17 22:01:09
不是对原始问题的确切回答,而是将您的异常映射到http响应状态的一个快速方法是抛出org.springframework.web.server.ResponseStatusException /或创建您自己的子类。
对http响应状态+ spring的完全控制将添加一个带有添加reason选项的响应体。
{
"timestamp": 1529138182607,
"path": "/api/notes/f7b.491bc-5c86-4fe6-9ad7-111",
"status": 400,
"error": "Bad Request",
"message": "For input string: \"f7b.491bc\""
}发布于 2022-03-22 14:14:55
下面的全局错误处理程序为我完成了这个任务:
import org.springframework.web.server.ResponseStatusException;
@Slf4j
@RestControllerAdvice
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
public class MyCustomReactiveErrorHandling {
@ExceptionHandler(MyCustomNotFoundException.class)
public void handleMyCustomException(MyCustomNotFoundException ex) {
throw new ResponseStatusException(404, "Data not found!", ex);
}
}抛出我的异常会在rest服务中返回正确的http状态代码。
https://stackoverflow.com/questions/49137253
复制相似问题