您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

@ExceptionHandler
public String handle(UnrecognizedPropertyException e) {
    ...
}

将用于处理异常。在Spring MVC寻找可以处理的处理程序方法HttpMessageNotReadableException之后,然后使用展开嵌套的异常Throwable#getCause并再次尝试查找,就会发生这种情况。

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

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

public String handle(UnrecognizedPropertyException e) {
    ...
}
Java 2022/1/1 18:14:49 有372人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶