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