我有一个JAX-RS项目,它使用 Jackson 来处理JSON转换。
当Jackson抛出异常时,它会自动返回带有错误描述的字符串。
由于我想返回一个自定义JSON对象,我创建了一个 ExceptionMapper 。
问题是,当我指定完全抛出异常的类型时,仅捕获异常。
例如,当发送给方法的JSON包含未知属性时,这将起作用:
public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>
但如果我将UnrecognizedPropertyException
更改为PropertyBindingException
(第一次扩展),则无法正常工作。
简而言之:
如何创建一个通用异常映射器来捕获Jackson(或我的应用程序的任何其他组件)抛出的任何异常?
答案 0 :(得分:0)
尝试
public class MyExceptionMapper implements ExceptionMapper<Exception>
这应该是所有异常的后备。
如果找到合适的ExceptionMapper,杰克逊正在寻找异常的层次结构。 只要类型层次结构中存在某些内容,它就会显示出来。 因此,UnrecognizedPropertyException将由PropertyBinding-Exception映射器处理,但不是相反,因为UnrecognizedPropertyException Mapper更具体,可能有许多子类,然后无法确定要采用哪个Mapper。所以它只能起作用。
因为Exception是基础异常,所有内容都会在那里结束。