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流量一起使用?
基础教程推荐
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01