我已成功为简单的WebService调用(查询框架和简单对象)实现了Jersey,但是当我尝试sync
商店或save
记录时,泽西岛并不了解{{1作家。它不知道从哪里开始,它不能rootProperty
ExtJS正在发送的json记录。遗憾的是,当您将数据转换为JSON时,根据ExtJS,Consume
是强制性的,因此我无法做到这一点。我显然可以使用rootProperty
并自己转换对象,但我试图利用泽西岛的自动对象编组等。
用于Consumes(MediaType.TEXT_PLAIN)
存储数据或.sync
记录的常规做法是什么?
编辑:我不认为问题出在我的对象的JSON上。我的商店代理配置如下:
.save
这样做是使用以下参数创建POST请求:
proxy: {
type: 'ajax',
url: 'ext/AnnouncementHelper/myFunction',
headers: {'Content-Type': 'application/json;charset=utf-8'},
reader: {
type: 'json',
rootProperty: 'data',
messageProperty: 'processMessage'
},
writer: {
type: 'json',
rootProperty: 'data',
encode: true,
writeAllFields: true
}
我的模型配置如下:
data={id: 1, description: 'status 1'}
我的功能声明是:
public class AnnouncementStatus {
private int id;
private String description;
@JsonCreator
public AnnouncementStatus() {
}
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;
}
}
这在java中给出了以下错误:
org.codehaus.jackson.JsonParseException:意外字符(' d'(代码100)):预期有效值(数字,字符串,数组,对象,' true', ' false'或' null')
我猜杰克逊并不喜欢我的对象是从@POST
@Path("myFunction")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response myFunction(AnnouncementStatus status)
开始,但我无法避免这种情况,因为在使用商店和记录时必须拥有root属性。
答案 0 :(得分:0)
我找到了解决我遇到的问题的方法,但不是手头的问题。
我仍然不知道如何使用泽西阅读作家的root属性,但我发现我不再需要了,因为如果我们将代理的作者改为{{1设置encoding: false
并不是必须的,它只是将记录作为数组发送。泽西的序列化程序可以理解这一点,它可以正确地将数据解码为对象。