本文同步至 http://www.waylau.com/jersey-auto-discoverable-features-failed-in-maven/html
本來 Jersey "Auto-Discoverable Features"(自動發現功能)中 JSON 解析在 eclipse 右鍵運行項目是正常的,但用 Maven 編譯成 jar 後運行,就沒法使用 JSON 解析了java
<!-- more -->git
Jersey "Auto-Discoverable Features"(自動發現功能)。默認狀況下 Jersey 2.x 不隱式註冊在 classpath 上可用的模塊中的任何擴展功能,除非明確在擴展文檔中進行說明。用戶將明確註冊的擴展功能來使用他們的 Application 子類。一小部分 Jersey 提供模塊不須要顯式註冊他們的擴展功能,由於這些在配置(客戶端/服務器)中將會被Jersey 運行時發現和註冊,這些功能模塊實現的這些特性將呈如今 JAX-RS 應用部署的 classpath 上。這些自動發現模塊包括:github
也就是說,當我使用 jersey-media-moxy 的 JSON 解析時,理論上我並不須要註冊 JSON 解析。其中 jersey-media-moxy 的依賴爲:json
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-moxy</artifactId> <version>2.21</version> </dependency>
也許是 Maven 編譯機制的問題,程序沒法自動發現功能,能夠採用手動註冊的方式,在 ResourceConfig 配置中進行註冊 MoxyJsonFeature,以下:api
/** * REST 主應用 * * @author waylau.com * 2015年9月18日 */ public class RestApplication extends ResourceConfig { public RestApplication() { // 資源類所在的包路徑 packages("com.waylau.rest.resource"); // 註冊 MultiPart register(MultiPartFeature.class); // 註冊 CORS過濾器 register(CrossDomainFilter.class); // 註冊 JSON register(MoxyJsonFeature.class); // 註冊 SSE register(SseFeature.class); } }