捕捉任何异常杰克逊抛出一个ExceptionMapper

时间:2017-05-05 18:41:28

标签: java exception jackson jax-rs exceptionmapper

我有一个JAX-RS项目,它使用 Jackson 来处理JSON转换。

当Jackson抛出异常时,它会自动返回带有错误描述的字符串。

由于我想返回一个自定义JSON对象,我创建了一个 ExceptionMapper

问题是,当我指定完全抛出异常的类型时,捕获异常。

例如,当发送给方法的JSON包含未知属性时,这将起作用:

public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>

但如果我将UnrecognizedPropertyException更改为PropertyBindingException(第一次扩展),则无法正常工作。

简而言之:

如何创建一个通用异常映射器来捕获Jackson(或我的应用程序的任何其他组件)抛出的任何异常?

1 个答案:

答案 0 :(得分:0)

尝试

public class MyExceptionMapper implements ExceptionMapper<Exception> 

这应该是所有异常的后备。

如果找到合适的ExceptionMapper,杰克逊正在寻找异常的层次结构。 只要类型层次结构中存在某些内容,它就会显示出来。 因此,UnrecognizedPropertyException将由PropertyBinding-Exception映射器处理,但不是相反,因为UnrecognizedPropertyException Mapper更具体,可能有许多子类,然后无法确定要采用哪个Mapper。所以它只能起作用。

因为Exception是基础异常,所有内容都会在那里结束。