加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 处理spring mvc中的包装异常

发布时间:2020-12-15 01:27:00 所属栏目:大数据 来源:网络整理
导读:我有Spring MVC和jackson.当我启动不正确的请求时,Jackson映射失败并抛出UnrecognizedPropertyException.我想使用处理此异常 @ExceptionHandlerpublic String handle(UnrecognizedPropertyException e) { ...} 但是Spring在HttpMessageConversionException中

我有Spring MVC和jackson.当我启动不正确的请求时,Jackson映射失败并抛出UnrecognizedPropertyException.我想使用处理此异常

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

但是Spring在HttpMessageConversionException中包装了这个异常,所以上面的代码不起作用.是否有可能在Spring中处理Jackson特定的(或一般的库特定的)异常?

最佳答案
不幸的是,UnrecognizedPropertyException是IOException的子类型.处理@RequestBody的RequestResponseBodyMethodProcessor(我假设发生异常的地方)具有对IOException的特殊处理(解释为请求输入流的失败),将其包装在HttpMessageNotReadableException中.此外,如果在read期间发生转换错误,则指定HttpMessageConverter接口抛出HttpMessageNotReadableException.

无论如何,你将不得不处理这个问题(如果杰克逊改变了未经检查的例外情况,事情可能会有所不同).

幸运的是,since 4.3,Spring MVC’s ExceptionHandlerMethodResolver(处理@ExceptionHandler)可以解开异常的原因(see 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) {
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读