2016-10-12 152 views
0

我無法獲得Jersey服務來使用JSON。我不斷收到415不受支持的媒體類型錯誤。這是我的服務類和方法。 GET請求與純文本的POST一樣工作,但使用使用JSON的第三種方法的URI進行測試會生成錯誤。 Jersey內部的文檔說取消註釋media-moxy依賴項來添加我已經完成的JSON功能,但它不會影響行爲。我用下面的web.xml無法將JSON發佈到澤西島

package com.example; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 

@Path("/myresource") 
public class MyResource { 

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String getIt() { 
    String path = "Got it"; 
    return "Got it!"; 
} 


@POST 
@Path("/testpost/{x}") 
@Consumes(MediaType.TEXT_PLAIN) 
@Produces(MediaType.APPLICATION_JSON) 
public String testPost (@PathParam("x") String sessId) { 
    return "{a: \"333\"}" ; 
} 

@POST 
@Path("/testjson") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public String testjsonpost() 
{ 
    return "{json-received: \"333\"}" ; 
} 

} 

我的Maven依賴此運行Tomcat內有:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <!-- use the following artifactId if you don't need servlet 2.x compatibility --> 
     <!-- artifactId>jersey-container-servlet</artifactId --> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
    </dependency> 

</dependencies> 
<properties> 
    <jersey.version>2.23.2</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

的web.xml

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<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.example</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/webapi/*</url-pattern> 
</servlet-mapping> 

回答

0

添加這種依賴性

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
</dependency> 

它爲我工作。