我们如何将@ExceptionHandler与Spring Web流量一起使用?
在Spring Web中,我们可以使用Annotation@ExceptionHandler来处理控制器的服务器和客户端错误。
我试着在Web流量控制器上使用这个注释,它仍然适用于我,但经过一些调查,我发现here
Spring Web Active的情况更为复杂。因为 反应流由不同的线程进行计算 执行控制器方法,则不会出现异常 自动传播到控制器线程。这意味着 @ExceptionHandler方法仅对引发的异常有效 在直接处理请求的线程中。抛出的异常 如果我们希望将流传播回线程,则必须将其传播回线程 使用@ExceptionHandler功能。这看起来有点令人失望 但在撰写本文时,Spring5仍未发布,因此 错误处理仍可能会变得更好。
所以我的问题是如何将异常传播回线程。有没有关于使用@ExceptionHandler和Spring Web通量的好例子或文章?
更新: 从spring.io看起来得到了支持,但仍缺乏一般理解
谢谢,
WebFlux
您可以使用@ExceptionHandler
带注释的方法来处理推荐答案处理程序(例如,您的控制器方法)执行过程中发生的错误。使用MVC,您确实还可以处理映射阶段发生的错误,但WebFlux并非如此。
回到您的异常传播问题,您共享的文章不准确。
在反应式应用程序中,请求处理确实可以随时从一个线程跳转到另一个线程,因此您不能再依赖每个请求一个线程的模型(请考虑:ThreadLocal
)。
实际上,您不必考虑异常传播或如何管理线程。例如,以下示例应该是等效的:
@GetMapping("/test")
public Mono<User> showUser() {
throw new IllegalStateException("error message!");
}
@GetMapping("/test")
public Mono<User> showUser() {
return Mono.error(new IllegalStateException("error message!"));
}
反应堆将按照反应流合同中的预期将这些异常作为错误信号发送(有关详细信息,请参阅the "error handling" documentation section)。
相关文章