我已經成功實施了一項適合我自己的客戶端的寧靜服務。現在,我希望使其成爲其他客戶也可以與之交互的服務。就這樣,我來到了以下問題:(我的代碼快照談到我的問題後,系統正常工作與我的代碼)JAXB到JSON(反之亦然)如何使用Jersey?
1-數據是如何被服務器和客戶端的外觀之間傳遞什麼樣的?考慮到我沒有使用任何其他JAXB註釋(例如@XMLElement)。有沒有一種方法可以查看生成的JSON?
2- JAXB被認爲是「Java體系XML綁定」,所以,它是在發送數據爲XML或JSON(考慮到我已指定請求類型爲JSON)?或者,它是否將客體中的對象轉換爲XML,然後轉換爲JSON,並在服務器中將它轉換爲XML,然後轉換爲Java對象?
3-我使用JAXB在我的客戶端,但我的服務器應該接受一個JSON請求。這是否意味着任何其他客戶端,如果它產生與'鍵'和'價值'對JSON可以與我的服務器進行交互?或者,它是否強制每個客戶端都使用JAXB(考慮到我的服務器中的方法具有特定對象JAXBBean的輸入參數)?不幸的是,我目前不知道如何在不使用JAXB的情況下創建和發送Java中的json!所以,在詢問之前我無法測試這個問題..我將在稍後學習它。
零件的我的代碼:
我用球衣來實現我的RESTful服務。在客戶端,我向服務器發送包含JAXB對象列表的郵件消息。每個JAXB對象註釋這樣的bean的實例:
@XmlRootElement
public class JAXBBean {
String key;
String val;
//setters and getters (with no annotation) come here
...
}
我使用該列表發送到服務器:
String response = (String) publishWR.type("application/json").post(String.class, new GenericEntity<List<JAXBBean>> (reqArr){});
// publishWR is of type: com.sun.jersey.api.client.WebResource
// reArr is of type: List<JAXBBean>
在服務器端,我有回答到後一方法請寫下這樣的網頁資源:
@POST
@Consumes("application/json")
public String postAnnotation(List<JAXBBean> requestArr){
String anno = "";
String user = "";
...
for(int i = 0 ; i < requestArr.size() ; i++){
if(requestArr.get(i).getKey().equals("annotation"))
anno = requestArr.get(i).getVal();
else if(requestArr.get(i).getKey().equals("username"))
user = requestArr.get(i).getVal();
...
}
...
}
謝謝!
不能幫你新澤西州。如果你想知道CXF如何在Jackson和JAXB上做到這一點,我可以填補你的空白。 – bmargulies 2011-03-10 01:27:53