使用Jersey rest Web服务读取ExtJS writer root属性

时间:2015-04-06 15:00:06

标签: java web-services rest extjs jersey

我已成功为简单的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属性。

1 个答案:

答案 0 :(得分:0)

我找到了解决我遇到的问题的方法,但不是手头的问题。

我仍然不知道如何使用泽西阅读作家的root属性,但我发现我不再需要了,因为如果我们将代理的作者改为{{1设置encoding: false并不是必须的,它只是将记录作为数组发送。泽西的序列化程序可以理解这一点,它可以正确地将数据解码为对象。