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

vix*_*ram 5 java exception jax-rs jackson exceptionmapper

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

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

因为我想返回一个自定义JSON对象,所以我创建了一个ExceptionMapper.

问题是,当我确切地指定抛出的Exception的类型时,它只捕获异常.

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

public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>
Run Code Online (Sandbox Code Playgroud)

但是,如果我UnrecognizedPropertyException改为PropertyBindingException(第一个扩展),它将无法工作.

简而言之:

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

小智 0

尝试与

public class MyExceptionMapper implements ExceptionMapper<Exception> 
Run Code Online (Sandbox Code Playgroud)

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

如果 Jackson 找到合适的 ExceptionMapper,则会从异常向上查找层次结构。它看起来只要类型层次结构中存在某些内容即可。因此 UnrecognizedPropertyException 将由 PropertyBinding-Exception 映射器处理,但反之则不然,因为 UnrecognizedPropertyException Mapper 更具体,可能有很多子类,然后无法确定要采用哪个 Mapper。所以它只能向上工作。

因为 Exception 是基础 Exception,一切都在那里结束。