2011-03-10 28 views
2

我已經成功實施了一項適合我自己的客戶端的寧靜服務。現在,我希望使其成爲其他客戶也可以與之交互的服務。就這樣,我來到了以下問題:(我的代碼快照談到我的問題後,系統正常工作與我的代碼)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(); 
      ... 
    } 
    ... 
} 

謝謝!

+0

不能幫你新澤西州。如果你想知道CXF如何在Jackson和JAXB上做到這一點,我可以填補你的空白。 – bmargulies 2011-03-10 01:27:53

回答

0

1 - 你可以下載一個瀏覽器的JSON響應,並看看它用一個簡單的文本編輯(validate and format JSON)。
2-不,Jersey JSON提供程序使用Jackson,它直接在JSON中對對象進行序列化/反序列化,並返回到Java對象。
3-是每一位客戶能夠讀取你的JSON響應。