【问题标题】:HTTP Status 415 - Unsupported Media Type when doing POST callHTTP 状态 415 - 执行 POST 调用时不支持的媒体类型
【发布时间】:2017-05-06 08:25:04
【问题描述】:

看到 POST 请求时,我收到 415- Unsupported media type。我检查了很多给出的解决方案,但似乎都没有。我将内容类型设置为 application/json。但我仍然遇到同样的问题。

我尝试了添加 jackson-all.jar、jersey-media-json-jakson jar 和添加无参数构造函数等解决方案。似乎没有任何工作。

图书资源

package com.jugo.own.rest.resources;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.jugo.own.database.dao.BookDAO;
import com.jugo.own.rest.services.BookRO;

@Path("book")
public class BookResource {

    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public String getBook(@PathParam("id") Long id){
        BookDAO book = new BookDAO();
        return book.getBook(id);
    }

    @POST
    @Path("/add")
    @Consumes(MediaType.APPLICATION_JSON)
    public void createBook(BookRO ro) {
        BookDAO book = new BookDAO();
        book.createBooks(ro);
    }

}

BookRO

public class BookRO {

    private String bookName;
    private Long sectionId;
    private Long id;
    private String author;
    private String publication;

    public BookRO(){

    }

    public BookRO(String bookName, Long sectionId, Long id, String author, String publication) {
        this.bookName = bookName;
        this.sectionId = sectionId;
        this.id = id;
        this.author = author;
        this.publication = publication;
    }

    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public Long getSectionId() {
        return sectionId;
    }
    public void setSectionId(Long sectionId) {
        this.sectionId = sectionId;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getPublication() {
        return publication;
    }
    public void setPublication(String publication) {
        this.publication = publication;
    }

}

web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>LibManagement</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Jersey</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.vamsi.own.rest.resources</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>Jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

JSON 请求

{
    "bookName" : "Lord Of The Rings : The Fellowship Of The Ring",
    "sectionId" : 1,
    "id"        : 1,
    "author"    : "J.R.R Tolkein",
    "publication" : "Allen & Unwin"
}

另外,下面是我的 jar 依赖项。

aopalliance-repackaged-2.3.0-b10.jar
asm-debug-all-5.0.2.jar
com.fasterxml.jackson.core.jar
com.fasterxml.jackson.databind.jar
derby.jar
eclipselink.jar
hk2-api-2.3.0-b10.jar
hk2-locator-2.3.0-b10.jar
hk2-utils-2.3.0-b10.jar
jackson-all-1.9.0.jar
jackson-annotations-2.1.2.jar
jackson-jaxrs-base-2.2.3.jar
jackson-jaxrs-json-provider-2.5.4.jar
jackson-module-jaxb-annotations-2.2.2.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.3.0-b10.jar
javax.persistence_2.1.0.v201304241213.jar
javax.persistence.source_2.1.0.v201304241213.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.1.jar
jaxb-api-2.2.7.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet-core.jar
jersey-container-servlet.jar
jersey-core-1.9.1.jar
jersey-guava-2.13.jar
jersey-media-json-jackson-2.0-m07-1.jar
jersey-media-multipart-2.13.jar
jersey-server.jar
mimepull.jar
org.eclipse.persistence.jpa.modelgen_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpa.modelgen.source_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpars_2.5.2.v20140319-9ad6abd.jar
org.eclipse.persistence.jpars.source_2.5.2.v20140319-9ad6abd.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar

有什么想法吗?

【问题讨论】:

  • 您确定发送了正确的 Content-Type 标头吗?顺便说一句,无需使用路径 /add。只需发布到 /book。
  • 是的,我很确定内容类型已设置。我计划添加更多的 POST 调用。但无论如何,这应该没什么区别吧?
  • 也许,第一步是清理依赖关系。从您的列表中,您似乎使用了不同版本的 Jersey(1.9.1、2.0、2.13)。最新版本是 2.25.1。你使用 Maven 还是 Gradle?
  • 不,我应该转换吗?
  • 是的,您应该使用 Maven(或 Gradle)设置项目。你可能想看看this example

标签: json rest jersey


【解决方案1】:

我在 Postman 中遇到了同样的问题。

我的解决方案是将我的数据以 json 格式以 [raw] 格式写入 [Body]。像这样:

{"message": "更新的第一篇文章!"}

在 [标题] 中:

[KEY] 内容类型 [值] 应用程序/json

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 1970-01-01
    • 2013-01-22
    • 2017-07-05
    • 2015-08-29
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多