Jersey 「Auto-Discoverable Features」 在 Maven 編譯後失效

本文同步至 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 "Auto-Discoverable Features"(自動發現功能)。默認狀況下 Jersey 2.x 不隱式註冊在 classpath 上可用的模塊中的任何擴展功能,除非明確在擴展文檔中進行說明。用戶將明確註冊的擴展功能來使用他們的 Application 子類。一小部分 Jersey 提供模塊不須要顯式註冊他們的擴展功能,由於這些在配置(客戶端/服務器)中將會被Jersey 運行時發現和註冊,這些功能模塊實現的這些特性將呈如今 JAX-RS 應用部署的 classpath 上。這些自動發現模塊包括:github

  • 來自 jersey-media-moxy 的 JSON 綁定特性
  • jersey-media-json-processing
  • jersey-bean-validation

也就是說,當我使用 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);
	}
}

參考

相關文章
相關標籤/搜索