Java REST Webservice返回415-不支持的媒体类型
我已经使用jax-rs和jersey创建了一个restwebservice,它应该在POST请求中使用JSON。我的web服务类如下所示:Java REST Webservice返回415-不支持的媒体类型,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我已经使用jax-rs和jersey创建了一个restwebservice,它应该在POST请求中使用JSON。我的web服务类如下所示: @Path("/webhookservice") public class Webhook { @POST @Consumes(MediaType.APPLICATION_JSON) public Response readData (Song song) { // Prints out the song info
@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;
}
}
我的歌曲课:
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; }
}
My web.xml(如果需要)
SnapScan Webhook
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
za公司柳叶刀服务部
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
SnapScan Webhook
/*
我正在使用一个小小的rest客户端。。。以下是我发送的内容的屏幕截图:
当我发送时,我得到415不支持的媒体类型错误。有人知道为什么吗?可能是因为您没有为API函数指定路径。您只在代码中指定了资源路径
@POST
@Path("/somepath")
@Consumes(MediaType.APPLICATION_JSON)
public Response readData (Song song) {
...
}
您需要发送请求头
内容类型:application/json
。似乎REST客户端不会自动为您添加此标题。我倾向于添加
@Produces({"application/json"})
根据顶级类声明调用我的服务,并在适当的情况下重写
e、 g
正如其他人指出的,您缺少正确的标题。在“标题”中添加
内容类型:application/json
:
我在一段时间前遇到了相同的
415
http错误。我只是忘记了DTO类中默认的无参数构造函数。以与JPA实体类似的方式添加该构造函数,解决了我的问题,反序列化JSON->Object
现在可以工作了
我不确定这是否是你的情况,看看你的代码,但它可能会对其他关注415+JSON问题的人有用。
认为正常,因此在内容协商过程中通常会出现错误代码1)406-不可接受 2) 415-不支持的媒体类型 406表示服务器不接受在请求的accept标头下发送的内容类型 415是客户端正在请求头中发送内容类型,因此服务器直接拒绝说不支持的媒体类型 为了克服406,我们必须包含适当的依赖JAR,比如客户机希望服务器能够理解XML输入,那么服务器需要具有与XML相关的依赖性
要克服415-了解服务器支持的媒体类型,并在请求的内容类型标头中传递正确的媒体类型尽管分享可能是一种愚蠢的体验,但我将分享它,以防它为其他人节省时间。
我有一组连续的函数,第一个是带有注释的
@BodyParser.of(BodyParser.Json.class)
,当我注释第一个函数时,注释行被错误地保留为未注释,因此在第二个函数上应用了这样的注释,导致这样的415媒体类型错误hth添加
Content-Type: application/json and Accept: application/json
在REST客户端标题部分中,据我所知,这是可选的,但不是必需的。如果客户端发送标题
Content-Type:application/json
,我会尝试一下。你知道你可能是对的。让我see@lefloh-你是赢家!你是对的,我甚至不知道你需要在这些小客户端应用中设置它。你可以贴出来作为答案,我会接受的。谢谢如何在androidy中以编程方式添加内容类型您的回答为我节省了大量调试:DTheasker有一些代码,您能用他的代码回答他并告诉他在哪里修复它吗?
@Path("/foo")
@Produces({"application/json"})
public class FooRestService {
Content-Type: application/json and Accept: application/json