繁体   English   中英

使用Jersey和ExtJS的REST Web服务使用JSON

[英]Rest web service consuming JSON using Jersey and ExtJS

我正在尝试实现Jersey框架,以便使用宁静的方法路由我们的客户请求。 我已经成功创建了读取原始参数并将其发送的方法,它们甚至可以使用来自对象的JSON进行响应。 但是我无法做的一件事是从发布/输入甚至获取请求中读取(即消耗)一个json对象。 我已经尝试了所有可以在网上找到的内容,但无济于事。 由于某些工作问题,我只能使用Java 6和Jersey 1.19。 另外,对于客户端,我们使用ExtJS。

我的ExtJS请求的格式如下:

Ext.Ajax.request({
url: 'rest/RestClass/getMessage',
method: 'PUT',
header: {
    'Content-Type': 'application/json'
},
jsonData: {
    status: {
        id: 1,
        description: 'Description'
    }
},
success: function(response) {
    var result = response.responseText;
},
failure: function(response) {
    Ext.Msg.alert('Communication Error', 'Failed');
}
});

至于我的后端东西,我有这个:

@PUT
@Path("/getMessage")
@Consumes(MediaType.APPLICATION_JSON)
public void getMsg(JAXBElement<Status> status) {
    System.out.println("status id = " + status.getValue().getId());
    System.out.println("status description = " + status.getValue().getDescription());
}

我的Status对象也是:

@XmlRootElement
public class Status{

    private int id;
    private String description;

    public Status() {

    }

    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;
    }
}

由于已经发送了成功的请求,因此我已经正确映射了jersey servlet等。 我的问题是当我尝试在参数中发送带有json对象的对象时出现错误。

起初,即使我使用的是jersey-bundle-1.19.jar ,其中包含所需的所有内容,但我还是因为缺少jackson库而jersey-bundle-1.19.jar 下载jackson-jaxrs-1.9.13.jar并将其添加到项目中后,我现在收到此错误:

找不到Java类javax.xml.bind.JAXBElement和Java类型javax.xml.bind.JAXBElement和MIME媒体类型application / json的消息正文阅读器。

我什至添加了一些jaxb jar,以防万一,但仍然出现相同的错误。 我在网上看到的许多示例都不适用于我。 而且他们都使用maven进行依赖控制,而我们没有访问权限,所以我不确定我们是否使用相同的库...

我在这里寻找的是具有我现有功能的解决方案:球衣1.19 ExtJS 5 JDK 6 WebLogic 10.X

目标是能够发送带有JSONObject作为参数的请求,并将其解码为服务器端为现有对象类型。

编辑:我什至在我的web.xml中添加了POJO映射(我发现在线需要泽西支持json / object映射)

<init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

仍然有同样的问题。 客户端415 error for unsupported media type给我一个415 error for unsupported media type

我找到了解决我问题的方法。 需要进行一些更改:

在请求的jsonData对象中,不应有status根属性。 只是对象本身:

jsonData: {
    id: 1,
    description: 'Description'
},

另外,我从方法的声明中删除了JAXBElement<Status> 它只是接收一个Status status对象。

最后, Status class不需要@XmlRootElement批注。 但是,它需要在其默认(空)构造函数上使用@JsonCreator批注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM