REST Webservice返回415 – 不支持的媒体类型

我使用jax-rs和jersey创建了一个REST Web服务,它应该在POST请求中使用JSON。 我的Web服务类看起来像这样:

@Path("/webhookservice") public class Webhook { @POST @Consumes(MediaType.APPLICATION_JSON) public Response readData (Song song) { // Prints out the song info System.out.println("SONG INFO \n======================="); System.out.println("songname: " + song.getSongname()); System.out.println("artist: " + song.getArtist()); // Repsonse with a HTTP 200 OK Response response = Response.status(200).build(); return response; } } 

我的歌class:

 public class Song { private String songname; private String artist; public String getSongname () { return this.songname; } public String getArtist () { return this.artist; } public void setSongname (String songname) { this.songname = songname; } public void setArtist (String artist) { this.artist = artist; } } 

我的web.xml(如果需要)

    SnapScan-Webhook com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages za.co.lancet.service   com.sun.jersey.api.json.POJOMappingFeature true  1   SnapScan-Webhook /*   

我正在使用RESTClient ,好吧,rest客户端…这是我发送的截图:

在此处输入图像描述

当我发送它时,我得到415 Unsupported Media Type错误。 有谁知道为什么?

您需要发送请求标头Content-Type: application/json 。 似乎REST-Client不会自动为您添加此标头。

正如其他人指出的那样,你错过了正确的标题。 将Content-Type: application/json到“Headers”: 在此处输入图像描述

我之前有过相同的415 http错误。 我只是忘了我的DTO类中的默认无参数构造函数。 以与JPA实体类似的方式添加该构造函数,解决了我的问题,并且反序列化JSON->Object现在可以正常工作。

我不确定这是你的情况,看看你的代码,但它可能对其他人看到415 + JSON问题有用。 问候

可能是因为您没有为API函数指定路径。 您只在代码中指定了资源路径。

 @POST @Path("/somepath") @Consumes(MediaType.APPLICATION_JSON) public Response readData (Song song) { ... } 

我倾向于补充

 @Produces({"application/json"}) 

对我的服务反对顶级类声明和适当的覆盖。

例如

 @Path("/foo") @Produces({"application/json"}) public class FooRestService { 

好的,所以在内容协商期间通常会出现错误代码1)406 – 不可接受2)415 – 不支持的媒体类型

406是服务器不接受在请求的ACCEPT报头下发送的内容类型。

415是客户端在请求头中发送内容类型,因此服务器直接拒绝说不支持的媒体类型

克服406 – 我们必须包括适当的依赖jar,说客户想要服务器理解XML输入,然后服务器需要具有XML相关的依赖。

克服415 – 了解服务器支持的媒体类型,并在请求的内容类型标头中传递正确的媒体类型