如何在Spring Exception Handler中处理包装的异常?[重复]

如何在Spring Exception Handler中处理包装的异常?[重复],第1张

如何在Spring Exception Handler中处理包装的异常?[重复]

不幸的是,

UnrecognizedPropertyException
是的子类型
IOException
。在
RequestResponseBodyMethodProcessor
一个处理
@RequestBody
(我认为这就是发生异常)具有特殊处理
IOException
(如解析请求输入流的失败),在其包装
HttpMessageNotReadableException
。另外,如果在期间发生转换错误,
HttpMessageConverter
则指定接口抛出。
HttpMessageNotReadableException
read

无论如何,您都将不得不处理该问题(如果杰克逊抛出了未经检查的异常,情况可能会有所不同)。

幸运的是,从4.3开始,Spring
MVC

ExceptionHandlerMethodResolver

(处理
@ExceptionHandler
)可以解开
cause
异常的包装(请参阅SPR-14291)。因此,假设您的处理
HttpMessageNotReadableException
程序方法的继承层次结构中没有任何异常的处理程序

@ExceptionHandlerpublic String handle(UnrecognizedPropertyException e) {    ...}

将用于处理异常。在Spring
MVC寻找可以处理的处理程序方法

HttpMessageNotReadableException
之后,然后使用展开嵌套的异常
Throwable#getCause
并再次尝试查找,就会发生这种情况。


在4.3之前的版本中,或者如果您在

HttpMessageNotReadableException
继承层次结构中确实有针对异常类型的处理程序,则始终可以在自己提取出原因之后委托。

@ExceptionHandlerpublic String handle(HttpMessageConversionException e) throws Throwable {    Throwable cause = e.getCause();    if (cause instanceof UnrecognizedPropertyException) {        handle((UnrecognizedPropertyException) cause);    }    ...}public String handle(UnrecognizedPropertyException e) {    ...}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5641649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存