不支持Java POST请求的媒体类型

Unsupported Media Type with Java POST request

本文关键字:媒体 类型 请求 Java POST 不支持      更新时间:2023-09-26

我有一个java类:

@XmlRootElement
public class RoomInfo {
    @XmlElement
    public String name;
    @XmlElement
    public String w;
    @XmlElement
    public String h;
    @XmlElement
    public String size;
}

还有一个宁静的网络服务:

@Path("/create")
public class Create {
    @POST
    @Consumes("application/json")
    public void getInfo(RoomInfo room){
        System.out.println("signal");
        System.out.println(room.name);
        System.out.println(room.w);
        System.out.println(room.h);
        System.out.println(room.size);
    }
}

我正试图用javascript发送一个带有json参数的POST请求:

var xh = new XMLHttpRequest();
var json = JSON.stringify({
    name: "Room1",
    w: "2",
    h: "4",
    size: "12"
});
xh.open("POST", 'http://localhost:8080/create', true);
xh.setRequestHeader('Content-type', 'application/json; charset=utf-8');
console.log(json);
xh.send(json);

但我在浏览器的控制台中得到了以下输出:

{"name":"Room1","w":"2","h":"4","size":"12"}

加载资源失败:服务器响应状态为415(不支持的媒体类型)

我知道由于某种原因,我发送的数据无法放入我的RoomInfo对象,但我不明白为什么。

服务器控制台还显示以下内容:com.sun.jsey.spi.cotainer.ContainerRequest.getEntity Java类com.example.jersey.RoomInfo、Java类型类com.example.jersey.RoomInfo和MIME媒体类型application/json的消息体读取器;未找到charset=UTF-8。已注册的与MIME媒体类型兼容的邮件正文读取器包括:application/json;charset=UTF-8->

要使POST正常工作,您的POST需要设置"application/json"的"Content Type"标头

那么您的POST方法可能还需要@Produces(MediaType.APPLICATION_JSON)

此外,POJO确实需要一个如上所述的默认构造函数。