2012-11-22 82 views
0

我創建一個Web服務將妥善處理傳入的請求(我知道,這是一個說明),我發現其中存在SOAP WS,看起來像一些示例代碼:我怎樣才能在HTTP請求發送對象

@SoapAction("some fine url") 
    @ResponsePayload 
    public CertResponse getCert(@RequestPayload Cert param) 
    {...} 

從請求中取出Cert對象並正確進行管理。我想這樣做的REST方法,我改變了這一類的樣子:

@RequestMapping(value="getCert", method = RequestMethod.POST) 
    @ResponseBody 
    public CertResponse getCert(@RequestBody Cert param) 
    {...} 

但我不知道如何,甚至是否有可能寫一個客戶端可以通過HTTP郵寄對象。

任何人都可以給我一個提示如何發送對象Cert?或者如果我必須留在@SoapAction我應該怎麼做才能使它工作?我想刪除@Controller是不夠的。

回答

2

在SOAP方法中,將每個類對象轉換爲SOAP格式的XML都有一個明確的方法。因此,沒有努力。

如果您將使用RESTful方法,則必須描述Cert或CertResponse對象將如何寫入/讀取響應/請求。

基本上,你有三種選擇:

  1. 使用JSON或XML或純字符串。轉換您的Web服務描述符,以便請求和響應是其中一個(JSON,XML,String)。然後,您的getCert方法應該將請求轉換爲Cert對象,將您的響應準備爲CertResponse對象並將其轉換爲適當的響應類型。

  2. 讓您的getCert方法保持原樣。但是您需要指定「Cert對象如何從請求中讀取」和「CertResponse對象如何寫入響應」您需要定義擴展接口MessageBodyReader和MessageBodyWriter的類。在這些類中,應該實現類似的轉換邏輯,以便將對象轉換爲JSON或XML或String。

    在這兩個選項中,您需要實現兩件事:將JSON/XML/String轉換爲Cert的方法,該方法將CertResponse對象轉換爲JSON/XML/String。

    您可以執行一個基於文本的實現,它通過文本處理解析/構造請求/響應,並僅使用String類。或者,您可以使用一些庫,例如帶有JSONObject類的JSON庫,或Java捆綁包附帶的Java SAX或基於DOM的XML庫。

  3. 查看Spring等應用程序框架。他們可能會提供自動將對象轉換爲JSON或XML的方式,從而減少必要的編程工作量。

1

Spring允許您從客戶端傳遞JSON對象作爲請求參數,它會自動將它們轉換爲您的對象。 This討論有一些例子。

1

SOAP服務並不真正與REST語義兼容。目前還不清楚您使用的是什麼SOAP框架。通常,大多數SOAP框架爲您提供了一種或另一種方式爲您的WSDL生成SOAP客戶端代碼。你可以檢查cxf.apache.org。 對於REST服務,使用類似Jersey或Spring的MVC