我有一個同時使用Spring和Jersey的Servlet 3.0 web應用程序。我目前已經使用配置爲web.xml中的過濾器的SpringServlet進行設置,並使用@Path
和@Component
對註冊的資源類進行註釋。這裏的web.xml片段:如何使用Spring註釋配置Jersey與Jersey
<filter>
<filter-name>jersey-serlvet</filter-name>
<filter-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</filter-class>
<init-param>
<param-name>
com.sun.jersey.config.property.packages
</param-name>
<param-value>com.foo;com.bar</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這個設置的工作原理,但我真的想只用註釋得到這個設置 - 沒有web.xml配置。我的第一個嘗試是刪除上面的SpringServlet配置並創建一個擴展Application
的類。下面是一個片段:
@ApplicationPath("/*")
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.foo;com.bar");
HashMap<String, Object> settings = new HashMap<String, Object>(1);
settings.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, true);
this.setPropertiesAndFeatures(settings);
}
}
這工作,因爲在JAX-RS資源註冊,我可以在他們的URL打他們,但他們拋出NullPointerException異常,當他們試圖用自己的自動裝配屬性...這使得因爲我猜測資源現在正在被Jersey加載,而不是Spring管理的bean,因此沒有自動裝配。
儘管有一點點搜索,但我找不到任何將Jersey資源加載爲僅具有註釋的Spring bean的方式。 有沒有這樣的方法?我真的不想爲資源編寫一堆代碼來手動獲取Spring上下文並調用DI,如果我可以幫助的話。
如果只註釋不起作用,那麼我可以在web.xml中使用filter配置,如果我可以指定Application
類來加載而不是要掃描的軟件包列表。如果我可以擺脫那裏的軟件包列表並指定一個Application
類實例,那麼我會滿足。
很顯然,如果有人對我有明確的答案,但我也會很感激任何我可以看的東西或想要嘗試的東西的提示或提示。
謝謝, 馬特
謝謝您的回答,但我使用澤西1,我沒有任何麻煩Jersey資源已加載並正在運行。問題是我希望他們由Spring管理,所以我可以自動裝配。 – Doughnuts
好的,在這種情況下,這不是一個解決方案。但要清楚的是:這確實使Spring自動裝配成爲可能。 – rustyx