Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jersey rest web服务读取ExtJS编写器根属性_Java_Web Services_Rest_Extjs_Jersey - Fatal编程技术网

Java 使用Jersey rest web服务读取ExtJS编写器根属性

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的自动对象编

我已经成功地为简单的WebService调用(queryparams和简单对象)实现了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的序列化程序可以理解这一点,它可以正确地将数据解码为对象