我正在使用弹簧靴以及 JAX-RS 和泽西岛。我为不同的类型定义ExceptionMappers
了不同的类型,Exceptions
其中一种ExceptionMapper
作为Fallback
映射器,只是为了正确记录异常并将正确的响应发送回客户端。在单元测试级别上,一切正常,ExceptionMapper
并且Exception
使用
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-inmemory</artifactId>
然而,在正在运行的应用程序(嵌入在 Jetty 中)上,只有捕获 的 Fallback 映射器java.lang.Exception
被调用,而所有其他映射器都被忽略。我正在对所有内容使用注释扫描,并且FallbackExceptionMapper
andMyCustomExceptionMapper
都在同一个包中并用@Provider
. 知道为什么其他异常映射器MyCustomExceptionMapper
不起作用吗?
更新:我将异常的类型从我的更改java.lang.Exception
为FallbackExceptionMapper
,MyCustomException
这也没有被调用。似乎除了根异常(java.lang
)之外没有其他异常被映射器捕获。
Update2:@Context javax.ws.rs.ext.Providers
通过在我的 FallbackExceptionMapper 和方法中定义提供程序,providers.getExceptionMapper(MyCustomException.class)
我确实看到它返回了 MyCustomExceptionMapper 的一个实例,但我想知道为什么 Jersey 不调用它!任何想法??