Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey:JSON不支持的媒体类型_Java_Json_Rest_Jersey_Http Status Code 415 - Fatal编程技术网

Java Jersey:JSON不支持的媒体类型

Java Jersey:JSON不支持的媒体类型,java,json,rest,jersey,http-status-code-415,Java,Json,Rest,Jersey,Http Status Code 415,我想创建一个RESTAPI来获取json数据并发送json数据 我的书本课: @Entity public class Book { @Id private String isbn; public Book() { } ...... } 我的图书服务: @Path("/books") public class BookService { @POST @Consumes(MediaType.APPLICA

我想创建一个RESTAPI来获取json数据并发送json数据

我的书本课:

@Entity
public class Book {

    @Id
    private String isbn;

    public Book() {
        
    }
......
}
我的图书服务:

@Path("/books")
public class BookService {

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response buyBook(Book book){
        String isbn = book.getIsbn();
        int number = book.getStock();
   
        return Response.status(Response.Status.OK).entity("OK").build();
    }
......
}
当我尝试与邮递员一起发布此邮件时:

POST /books HTTP/1.1    
Host: localhost:5000    
Content-Type: application/json    
Cache-Control: no-cache    
Postman-Token: 3099cd3a-184a-e442-270a-c118930df2b5    

{    
    "isbn" : "",    
    "title" : "",    
    "author" : "",    
    "stock" : "2"    
}        
我的rest API向我发送以下响应:

HTTP ERROR 415
Problem accessing /books. Reason:
Unsupported Media Type

编辑:(使用pom.xml)

4.0.0
批发商服务
1.0-快照
批发商服务
org.glassfish.jersey.containers
jersey容器servlet
2.17
org.eclipse.jetty
码头servlet
9.2.10.v20150310
org.eclipse.jetty
jetty网络应用程序
9.2.10.v20150310
javax.ws.rs
javax.ws.rs-api
2.0.1
假如
org.hibernate.ogm
冬眠ogm mongodb
4.1.3.最终版本
javax.persistence
持久性api
1.0.2
org.eclipse.persistence
日食
2.5.2
公地郎
公地郎
2.6
罐子
org.apache.maven.plugins
maven依赖插件
2.4
复制依赖项
包裹
复制依赖项
1.7
1.7
批发商服务

项目中是否包含jackson jaxrs json提供程序

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

com.fasterxml.jackson.jaxrs
jackson jaxrs json提供程序
2.5.3

一般来说:您的图书服务缺少您试图发布的标题、作者和股票。

因此,为了使用JSON到POJO的实体转换,我们需要一个
MessageBodyReader
(有时称为提供者)来处理转换。有了Java,Jackson已经成为事实上的JSON库一段时间了,他们提供了一个支持JAX-RS的模块,正如

或者在web.xml中,将功能注册为提供程序类

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>
        org.glassfish.jersey.jackson.JacksonFeature
    </param-value>
</init-param>

jersey.config.server.provider.classnames
org.glassfish.jersey.jackson.JacksonFeature

书籍
没有成员
标题
作者
,和
stock
。尝试在“buyBook”方法中的“Book Book”之前添加@BeanParam。我添加了@BeanParam,出现了一个新错误:无法发送响应错误500:javax.servlet.ServletException:java.lang.IllegalArgumentException:加载需要加载id。我的请求是:{“isbn”:“456”,“title”:“author”:“stock”:“2”}你确定这是导致415的原因吗?我认为这可能是415错误的原因(dm_fr可以轻松测试):Web服务器(运行网站)认为客户端发送的HTTP数据流标识的URL资源的实际媒体类型1)与请求中指定的媒体类型不一致,或2)与资源的当前数据不兼容,或3)与请求中指定的HTTP方法不兼容。是,这就是HTTP规范。您是否测试了使用JAX-RS时是否会发生这种情况?这可能是正确的答案,但问题可能出在其他地方。我想我们需要知道依赖关系。@dm_fr在查看pom后,是的,您缺少一个提供程序。但是,用(第一个)代替这个答案所建议的。这不需要额外的配置。它实际上包装了依赖项(上面的答案提供),因此我们不需要配置它
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.5.3</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version> <!-- 2.17 latest as of now -->
</dependency>
@ApplicationPath("/api")
public class AppConfig extends ResourceConfig {
    public AppConfig() {
        packages("...");
        register(JacksonFeature.class);
    }
}
<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>
        org.glassfish.jersey.jackson.JacksonFeature
    </param-value>
</init-param>