2012-09-07 38 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

相关问题