假设我有3个异常类,我想“抓住”:
我希望WebApplicationException仍然由Jersey自动映射,MyException由MyMapper映射,并确保MyFallbackMapper也映射任何其他异常。
因为任何异常(我想控制)最终会扩展Exception,是否可以保证MyMapper(而不是MyFallbackMapper)将用于MyException?
答案 0 :(得分:13)
JAX-RS 1.1规范,第4.4章:
当资源类或提供程序方法抛出异常时,JAX-RS运行时将尝试将异常映射到合适的HTTP响应 - 请参阅第3.3.4节。应用程序可以提供异常映射提供程序来自定义此映射。
异常映射提供程序将已检查或运行时异常映射到Response实例。异常映射提供程序实现ExceptionMapper接口,并使用@Provider进行批注。当资源方法抛出具有异常映射提供程序的异常时,匹配提供程序用于获取Response实例。生成的响应将被处理,就像抛出异常的方法已返回响应一样,请参阅第3.3.3节。
当选择异常映射提供程序来映射异常时,实现必须使用其泛型类型是异常的最近超类的提供程序。