簡體   English   中英

HTTP 415不支持的媒體類型

[英]HTTP 415 Unsupported Media Type

我創建了一個樣本Web服務來進行郵寄。

我正在使用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 Web服務返回415-不支持的媒體類型

但是我仍然有問題。

我刪除了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>

我有一個類似的問題,可能是您忘記了Patient類的默認無參數構造函數。

詳細地說,當通過對我的JAX-rs服務通過PUT / PUSH請求發送序列化為JSON的對象時,我遇到了相同的415 http錯誤,換句話說,我的服務器無法從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;
    }
}

我浪費了幾個小時,希望這可以節省您的時間;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM