HTTP 415不支持的媒体类型

时间:2015-06-14 02:16:24

标签: java web-services maven jax-rs

我创建了一个示例网络服务来进行邮局调用。

我正在使用Jersey JAX-RS和Maven。

的web.xml

<servlet>
    <servlet-name>provider-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>org.is.ws.provider.rest.ProviderAggregateApplication</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
         </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>provider-serlvet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

的pom.xml

<!-- Jersey jars -->

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
    </dependency> 
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.19</version>
    </dependency>           
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.19</version>
    </dependency>
      <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.18</version>
      </dependency>
      <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

方法调用:

@POST
@Path(RESOURCE_PATH)
@Produces("text/plain")
public String getPCP(){
    return "Hello";
}

原始请求:

 POST http://localhost:9080/sep/pas/getPCP HTTP/1.1
 Connection: close
 Accept-Encoding: gzip,deflate
 Content-Type: application/json
 Content-Length: 69
 Host: localhost:9080
 User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

  {
    "patientID": "1234567890",
    "patientIDType": "XYZ"
  }

我参考了以下文章

REST Webservice returning 415 - Unsupported Media Type

但我仍然有问题。

2 个答案:

答案 0 :(得分:0)

我删除了pom.xml中的所有依赖项代码,并添加了以下代码,其中包含jersey-core,jersey-bundle,jersey-json

 <dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.19</version>
</dependency>

答案 1 :(得分:0)

我遇到了类似的问题,可能是您忘记了Patient类的默认无参数构造函数。

详细地说,我在发送对象时遇到了同样的415 http错误,序列化为JSON,通过对我的JAX-rs服务的PUT / PUSH请求,换句话说,我的服务器无法反序列化来自JSON的对象。 就我而言,服务器能够在将JSON中的相同对象发送到其响应中时成功序列化。

正如其他回复中所述,我已将AcceptContent-Type标题正确设置为application/json,但这还不够。

<强>解决方案

我只是忘记了一个没有DTO对象参数的默认构造函数。是的,这与@Entity对象背后的原因相同,您需要一个没有参数的构造函数,以便ORM实例化对象并在以后填充这些字段。

将没有参数的构造函数添加到我的DTO对象解决了我的问题。 这是一个类似于我的代码的例子:

<强>错误

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class NumberDTO {
    public NumberDTO(Number number) {
        this.number = number;
    }

    private Number number;

    public Number getNumber() {
        return number;
    }

    public void setNumber(Number number) {
        this.number = number;
    }
}

从右

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class NumberDTO {

    public NumberDTO() {
    }

    public NumberDTO(Number number) {
        this.number = number;
    }

    private Number number;

    public Number getNumber() {
        return number;
    }

    public void setNumber(Number number) {
        this.number = number;
    }
}

我失去了几个小时,我希望这会拯救你的; - )