Java 使用Jersey rest web服务读取ExtJS编写器根属性
我已经成功地为简单的WebService调用(queryparams和简单对象)实现了Jersey,但是当我尝试Java 使用Jersey rest web服务读取ExtJS编写器根属性,java,web-services,rest,extjs,jersey,Java,Web Services,Rest,Extjs,Jersey,我已经成功地为简单的WebService调用(queryparams和简单对象)实现了Jersey,但是当我尝试sync存储或save记录时,Jersey不理解编写器的rootProperty。它不知道从哪里开始,也无法使用ExtJS正在发送的json记录。不幸的是,根据ExtJS,当您将数据转换为JSON时,rootProperty是必需的,因此我不能没有它。显然,我可以使用Consumes(MediaType.TEXT\u PLAIN)并自己转换对象,但我正在尝试利用Jersey的自动对象编
sync
存储或save
记录时,Jersey不理解编写器的rootProperty
。它不知道从哪里开始,也无法使用ExtJS正在发送的json记录。不幸的是,根据ExtJS,当您将数据转换为JSON时,rootProperty
是必需的,因此我不能没有它。显然,我可以使用Consumes(MediaType.TEXT\u PLAIN)
并自己转换对象,但我正在尝试利用Jersey的自动对象编组等功能
用于.sync
存储数据或.save
记录的一般做法是什么
编辑:我认为问题不在于对象的JSON。My store的代理配置如下:
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
}
这将使用以下参数创建POST请求:
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;
}
}
我的功能声明是:
@POST
@Path("myFunction")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response myFunction(AnnouncementStatus status)
这在java中给了我以下错误:
org.codehaus.jackson.JsonParseException:意外字符('d'(代码100)):应为有效值(数字、字符串、数组、对象、'true'、'false'或'null')
我猜jackson不喜欢我的对象以
data=
开头,但我无法避免这一点,因为在使用存储和记录时必须有根属性 我找到了一个解决问题的方法,虽然我手头的问题没有解决
我仍然不知道如何使用jersey读取writer的root属性,但我发现我不再需要这样做了,因为如果我们将代理的writer更改为具有编码:false
,则不必设置rootProperty
,它只是将记录作为数组发送。Jersey的序列化程序可以理解这一点,它可以正确地将数据解码为对象