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

java– 处理spring mvc中的包装异常,第1张

概述我有Spring MVC和jackson.当我启动不正确的请求时,Jackson映射失败并抛出UnrecognizedPropertyException.我想使用处理此异常@ExceptionHandler public String handle(UnrecognizedPropertyException e) { ... } 但是Spring在Htt

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

@ExceptionHandlerpublic 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的继承层次结构中的任何异常处理程序,您的处理程序方法

@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) {    ...}
总结

以上是内存溢出为你收集整理的java – 处理spring mvc中的包装异常全部内容,希望文章能够帮你解决java – 处理spring mvc中的包装异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址:https://54852.com/langs/1248468.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存