2016-04-01 65 views
0

我有一個@Provider帶註釋的異常映射程序,但澤西島不加載或註冊它。JaxRS異常映射程序找不到

在我web.xml(下調):

<servlet> 
    <servlet-name>Jersey</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      com.my.company; 
      com.fasterxml.jackson.jaxrs.json; 
     </param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
</servlet> 

映射器:

package com.my.company.some.package; 

@Provider 
public class MyExceptionMapper implements ExceptionMapper<MyException> { 
    @Override 
    public Response toResponse(MyException exception) { 
     return Response.status(Status.NOT_FOUND).build(); 
    } 
} 

我在com.my.company.other.package@Path註解API類,這些都是正確發現沒有我可以訪問它們問題。沒有找到@Provider帶註釋的映射器。

如果我在映射器構造函數和/或toResponse方法中放置了一條日誌消息,那麼也不會顯示這些消息。我不得不得出結論,澤西島無法找到或決定不加載課程。我如何得到這個工作?

+0

我沒有看到你提供的東西有什麼問題。也許你沒有提供的東西。不知道它可能是什麼。你能否提供一個能夠重現問題的小型github項目? –

回答

0

運動衫中的提供者包屬性不是遞歸的。它僅掃描那些軟件包,而不是以該名稱開頭的軟件包。

+0

遞歸行爲實際上取決於屬性['jersey.config.server.provider.scanning.recursive'](https://jersey.java.net/apidocs/2.22/jersey/org/glassfish/jersey/server/ ServerProperties.html#PROVIDER_PACKAGES),默認情況下爲true –

+0

我檢查過,並且該屬性不在我的'web.xml'中,所以我認爲它將默認爲true。這由備份正確的子包中的'@ Path'註解類來支持。 – Jorn

+0

只是想知道,你是否嘗試明確添加包名稱? –