5

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

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

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

问题是,只有当我准确指定抛出异常的类型时,它才会捕获异常。

例如,当发送到方法的 JSON 包含未知属性时,此方法有效:

public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>

但是,如果我更改UnrecognizedPropertyExceptionPropertyBindingException(第一个扩展的),它将不起作用。

简而言之:

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

4

1 回答 1

0

尝试

public class MyExceptionMapper implements ExceptionMapper<Exception> 

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

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

一个因为 Exception 是基础 Exception 一切都结束了。

于 2017-05-08T18:33:17.623 回答