簡體   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