【问题标题】:Catching any exception Jackson throws with a single ExceptionMapper使用单个 ExceptionMapper 捕获 Jackson 抛出的任何异常
【发布时间】:2017-10-04 08:10:39
【问题描述】:

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

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

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

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

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

public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>

但如果我将UnrecognizedPropertyException 更改为PropertyBindingException(第一个扩展),它将不起作用。

简而言之:

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

【问题讨论】:

    标签: java exception jackson jax-rs exceptionmapper


    【解决方案1】:

    试试

    public class MyExceptionMapper implements ExceptionMapper<Exception> 
    

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

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

    因为异常是基础异常,所以一切都结束了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多