Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 REST Webservice返回415-不支持的媒体类型_Java_Json_Rest_Jersey_Jax Rs - Fatal编程技术网

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

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

我已经使用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
        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