我正在尝试实现Jersey框架,以便使用restful方法路由我们的客户端请求。我已成功创建了读取原始参数的方法,发送它们,甚至可以使用对象的JSON进行响应。然而,我无法做的一件事是从post / put甚至get请求中读取(即消耗)json对象。我已经尝试过我能在网上找到的所有内容,但无济于事。由于一些工作问题,我被限制使用Java 6和Jersey 1.19。另外,对于我们的客户端,我们正在使用ExtJS。
我的ExtJS请求格式如下:
Ext.Ajax.request({
url: 'rest/RestClass/getMessage',
method: 'PUT',
header: {
'Content-Type': 'application/json'
},
jsonData: {
status: {
id: 1,
description: 'Description'
}
},
success: function(response) {
var result = response.responseText;
},
failure: function(response) {
Ext.Msg.alert('Communication Error', 'Failed');
}
});
就我的后端事情而言,我有这个:
@PUT
@Path("/getMessage")
@Consumes(MediaType.APPLICATION_JSON)
public void getMsg(JAXBElement<Status> status) {
System.out.println("status id = " + status.getValue().getId());
System.out.println("status description = " + status.getValue().getDescription());
}
我的状态对象是:
@XmlRootElement
public class Status{
private int id;
private String description;
public Status() {
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
我已经正确映射了jersey servlet等,因为我已经发送了成功的请求。我的问题是当我尝试在参数中发送一个带有json对象的错误时。
起初我错过了jackson
库的错误,即使我使用的jersey-bundle-1.19.jar
包含了所需的所有内容。下载jackson-jaxrs-1.9.13.jar
并将其添加到项目后,我现在收到此错误:
Java类javax.xml.bind.JAXBElement的消息体阅读器,以及 Java类型 javax.xml.bind.JAXBElement, 找不到MIME媒体类型application / json。
我甚至添加了一些jaxb
罐以防万一但仍然得到相同的错误。我在网上看到的很多例子都不适用于我。他们都使用maven进行依赖控制,我们无权访问,所以我无法确定我们是否使用相同的库...
我在这里寻找的是一个解决方案,我可以提供的东西: 球衣1.19 ExtJS 5 JDK 6 WebLogic 10.X
目标是能够以JSONObject作为参数发送请求,并将服务器端解码为现有对象类型。
编辑:我甚至在我的web.xml中添加了POJO映射(我发现在线需要jersey来支持json / object映射)<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
还有同样的问题。客户给我一个415 error for unsupported media type
答案 0 :(得分:0)
我找到了解决问题的方法。需要进行一些更改:
在请求的jsonData对象中,不应该有status
root属性。只是对象本身:
jsonData: {
id: 1,
description: 'Description'
},
我还从我方法的声明中删除了JAXBElement<Status>
。它只会收到一个Status status
对象。
最后,Status class
不需要@XmlRootElement
注释。然而,它需要@JsonCreator
注释超过其默认(空)构造函数。