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

Reading ExtJS writer root property using Jersey rest web service

我已经为简单的 WebService 调用(查询参数和简单对象)成功实现了 Jersey,但是当我尝试 sync 存储或 save 记录时,jersey 不理解 rootProperty 的作家。它不知道从哪里开始,也无法 Consume ExtJS 发送的 json 记录。不幸的是,当您将数据转换为 JSON 时,根据 ExtJS,rootProperty 是强制性的,所以我不能没有它。我显然可以使用 Consumes(MediaType.TEXT_PLAIN) 并自己转换对象,但我正在尝试利用 Jersey 的自动对象编组等

用于.sync存储数据或.save记录的一般做法是什么?

编辑:我不认为问题出在我的对象 JSON 上。我店的代理配置如下:

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: Unexpected character ('d' (code 100)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

我猜 jackson 不喜欢我的对象以 data= 开头,但我无法避免这种情况,因为在使用商店和记录时必须有根 属性。

我找到了我遇到的问题的解决方案,尽管不是手头的问题。

我仍然不知道如何使用 jersey 读取作者的根 属性 但我发现我不再需要了,因为如果我们将代理的作者更改为具有 encoding: false 它是设置 rootProperty 不是强制性的,它只是将记录作为数组发送。这是 Jersey 的序列化器所理解的,它可以正确地将数据解码为对象。