How could we use @ExceptionHandler with spring web flux?(我们如何将@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)。
这篇关于我们如何将@ExceptionHandler与Spring Web流量一起使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我们如何将@ExceptionHandler与Spring Web流量一起使用?


- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 转换 ldap 日期 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 获取数字的最后一位 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01