Java 使用单个ExceptionMapper捕获Jackson抛出的任何异常
我有一个JAX-RS项目,它使用Jackson来处理JSON转换 当Jackson抛出异常时,它会自动返回一个带有错误描述的字符串 因为我想返回一个定制的JSON对象,所以我创建了一个ExceptionMapper 问题是,当我精确地指定抛出的异常类型时,它只捕获异常 例如,当发送到方法的JSON包含未知属性时,这会起作用: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
public class MyExceptionMapper implements ExceptionMapper<UnrecognizedPropertyException>
公共类MyExceptionMapper实现ExceptionMapper
但是如果我将UnrecognizedPropertyException
更改为PropertyBindingException
(第一个扩展),它将不起作用
简而言之:
我如何创建一个通用的异常映射器来捕获Jackson(或我的应用程序的任何其他组件)抛出的任何异常
public class MyExceptionMapper implements ExceptionMapper<Exception>
公共类MyExceptionMapper实现ExceptionMapper
这应该是所有异常的回退
Jackson正在从异常开始寻找层次结构,如果它找到了合适的ExceptionMapper。
只要类型层次结构中有某种内容,它就会显示出来。
因此,UnrecognizedPropertyException将由PropertyBinding异常映射器处理,但不是相反,因为UnrecognizedPropertyException映射器更为具体,可能有许多子类,因此无法确定采用哪个映射器。所以它只能向上工作
因为异常是基本异常,所有的东西都会在那里结束