2012-09-07 64 views
5

免責聲明:我的確在詳細搜索這個問題的答案,是的,我確實發現了另一個問題:https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice。但是,首先,這個問題是關於Javascript的問題,而我正在問Java,其次,它無論如何都沒有答案。所以在這個問題......如何從另一種方法將@FormParam傳遞給REST風格的服務?

隨着RESTful服務,傳遞@QueryParam s轉換爲@GET服務是相當容易的,因爲你可以變量名稱/值對簡單地附加在URL並用它來從內打到服務器程序。有沒有辦法用@FormParam來做到這一點?

例如,假設我有以下的RESTful服務:

@POST 
@Produces("application/xml") 
@Path("/processInfo") 
public String processInfo(@FormParam("userId") String userId, 
          @FormParam("deviceId") String deviceId, 
          @FormParam("comments") String comments) { 
    /* 
    * Process stuff and return 
    */ 
} 

...讓我們說,我也有另一種方法在其他地方在我的計劃是這樣的:

public void updateValues(String comments) { 

    String userId = getUserId(); 
    String deviceId = getDeviceId(); 

    /* 
    * Send the information to the /processInfo service 
    */ 

} 

如何我可以在第二種方法中執行註釋掉的動作嗎?

NOTE:假設這些方法不在同一個類或包中。還要假定REST風格的服務託管在不同的服務器上,而不是您運行方法的計算機。因此,您必須必須訪問方法並以RESTful方式傳遞值。

謝謝你的幫助!

回答

6

使用@FormParam,您可以將表單參數綁定到變量。您可以找到樣本here。其次,爲了在你的Java方法代碼中內部調用rest服務,你將不得不使用球衣客戶端。例子代碼可以被發現here

您可以使用澤西客戶端窗體傳遞窗體參數,如下所示。

創建形式

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(UriBuilder.fromUri("http://localhost:8080/api").build()); 

Form f = new Form();  
f.add("userId", "foo");  
f.add("deviceId", "bar");  
f.add("comments", "Device"); 

它傳遞給RESTful方法。

service.path("processInfo").accept(MediaType.APPLICATION_XML).post(String.class,f); 

reference

+1

您可以通過表單參數是這樣,使用com.sun.jersey.api.representation.Form如下。 Form f = new Form(); f.add(「userId」,「foo」); f.add(「deviceId」,「bar」); f.add(「comments」,「Device」); // Fluent接口 service.path(「processInfo」)。accept(MediaType.APPLICATION_XML).post(String.class,f); –

+0

太棒了!你能否在你的答案中加上這一點,並解釋最後一行?這一個:'service.path(「processInfo」)。accept(MediaType.APPLICATION_XML).post(String.class,f)'然後我會接受。 :) – asteri

+1

具體來說,你正在調用'path()'的''service'對象是什麼? – asteri

相關問題