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流量一起使用?


基础教程推荐
- Struts2 URL 无法访问 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01