2013-08-23 47 views
2

我試圖在Jetty上使用Jersey JAXRS設置一些REST服務。儘管如此,我無法將JSON數據傳遞給我的REST服務類。我的ajax請求不斷獲得「不支持的媒體類型」錯誤和狀態。無論我在我的方法中添加了哪些@Produces@Consumes註釋,儘管他們都應該是MediaType.APPLICATION_JSON,我也會得到這個結果。使用Jetty設置Jax-rs 2.2

我在澤西島上找不到像樣的文件,大量問題,博客和其他資源似乎都過時了。看起來澤西島最近經歷了很多變化,我對我應該在哪裏尋找的東西感到不知所措。我設置的基礎上,球衣的webapp的原型如下:

的web.xml:

<servlet> 
    <servlet-name>Jersey Web Application</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.package.rest</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

代碼片段:

@Path("/users") 
public class UserService { 

    // Plain text works! 
    @GET 
    @Consumes(MediaType.TEXT_PLAIN) 
    public String list(){ 
     return "Got it!"; 
    } 

    // JSON doesn't work! >:(
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public User create(User user) { 
     Mocks.USERS.add(user); 
     return user; 
    } 

我父POM管理這些依賴關係AHD這兩個中的第二個我的jax-rs項目pom中的一個依賴項。

<dependency> 
    <groupId>org.glassfish.jersey</groupId> 
    <artifactId>jersey-bom</artifactId> 
    <version>2.2</version> 
    <type>pom</type> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.2</version> 
</dependency> 

我需要的東西,以增加對JSON支持?

+0

也許增加一個JAX-RS傑克遜依存度將解決這個問題:http://mvnrepository.com/artifact/org.codehaus.jackson/jackson -jaxrs/1.9.13 –

回答

1

似乎德魯在他的評論在正確的軌道上。但答案(澤西島2.2 +傑克遜至少)是一個更加先進的最新提供商

<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-json-provider</artifactId> 
    <version>2.2.3</version> 
</dependency> 

使用這種無需配置。將這與原始問題中的兩個依賴關係一起使用,並且您正在開展業務。

2

你讀過JSON這個章節嗎Users Guide?最簡單的方法是在MOXy上添加依賴項,並且JSON支持可以工作開箱即用(您不需要顯式註冊模塊提供的功能,以使其工作起來而不是澤西州的其他JSON模塊) :

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-moxy</artifactId> 
    <version>2.2</version> 
</dependency> 

不管怎麼說新澤西州提供了更多的模塊,這將幫助你處理JSON媒體類型:

+0

謝謝這工作。我想使用傑克遜,但我無法在文檔中找到它詳細說明ResourceConfig類的詳細信息,但我想從中鏈接到的示例以及漫遊文檔的一些內容中找到我得到它的工作。我創建了一個擴展ResourceConfig的類,並將JacksonFeature類註冊到它。我還爲我的web.xml添加了一個''init-param'',其參數名爲'''''javax.ws.rs.Application''',參數值爲'''com.another.package .MyApplication''' – bzuillsmith

+0

我後來發現了一個Jackson jaxrs提供者,它將自動連接到Jersey,而不是由Jersey提供的需要配置的jackson模塊。 – bzuillsmith

0

JSON開始工作對我來說只是2依賴性:

<dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.jaxrs</groupId> 
     <artifactId>jackson-jaxrs-json-provider</artifactId> 
     <version>2.2.3</version> 
    </dependency>