spring – 使用webflux处理异常并返回正确的HTTP代码

前端之家收集整理的这篇文章主要介绍了spring – 使用webflux处理异常并返回正确的HTTP代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用WebFlux的功能端点.我使用onErrorResume将服务层发送的异常转换为HTTP错误代码

public Mono

一旦服务返回Mono,它就能很好地工作.如果服务返回Flux,我该怎么办?

public Flux

编辑

我尝试了下面的方法,但不幸的是它不起作用. Flux.error不由onErrorResume处理并传播到框架.当在http响应的序列化期间取消装箱异常时,Spring Boot异常管理会捕获它并将其转换为500.

public Mono

我实际上对这个行为感到惊讶,那是一个bug吗?

最佳答案
您的第一个示例是使用Mono(即最多一个值),因此它与Mono< ServerResponse>一起使用时效果很好. – 该值将在内存中异步解析,根据结果,我们将返回不同的响应或手动处理业务异常.

在Flux(即0..N值)的情况下,在任何给定时间都可能发生错误.

在这种情况下,您可以使用collectList运算符来转换您的Flux< String>进入Mono< List< String>>,带有一个很大的警告:所有元素都将缓冲在内存中.如果您的控制器/客户端依赖于流数据,那么数据流非常重要,这不是最佳选择.

我担心我没有更好的解决方案来解决这个问题,原因如下:因为在Flux期间的任何时候都可能发生错误,所以无法保证我们可以更改HTTP状态和响应:事情可能已经被刷新了网络.使用Spring MVC并返回InputStream或Resource时已经是这种情况了.

Spring Boot错误处理功能尝试编写错误页面并更改HTTP状态(请参阅ErrorWebExceptionHandler并实现类),但如果响应已提交,它将记录错误信息并让您知道HTTP状态可能是错误的.

猜你在找的Spring相关文章