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 – 了解服务器支持的媒体类型,并在请求的内容类型标头中传递正确的媒体类型