Java 使用单个ExceptionMapper捕获Jackson抛出的任何异常

Java 使用单个ExceptionMapper捕获Jackson抛出的任何异常,java,exception,jackson,jax-rs,exceptionmapper,Java,Exception,Jackson,Jax Rs,Exceptionmapper,我有一个JAX-RS项目,它使用Jackson来处理JSON转换 当Jackson抛出异常时,它会自动返回一个带有错误描述的字符串 因为我想返回一个定制的JSON对象,所以我创建了一个ExceptionMapper 问题是,当我精确地指定抛出的异常类型时,它只捕获异常 例如,当发送到方法的JSON包含未知属性时,这会起作用: public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyExcep

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

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

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

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

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

public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>
公共类MyExceptionMapper实现ExceptionMapper
但是如果我将
UnrecognizedPropertyException
更改为
PropertyBindingException
(第一个扩展),它将不起作用

简而言之:

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

public class MyExceptionMapper implements ExceptionMapper<Exception> 
公共类MyExceptionMapper实现ExceptionMapper
这应该是所有异常的回退

Jackson正在从异常开始寻找层次结构,如果它找到了合适的ExceptionMapper。 只要类型层次结构中有某种内容,它就会显示出来。 因此,UnrecognizedPropertyException将由PropertyBinding异常映射器处理,但不是相反,因为UnrecognizedPropertyException映射器更为具体,可能有许多子类,因此无法确定采用哪个映射器。所以它只能向上工作

因为异常是基本异常,所有的东西都会在那里结束