如何从另一个方法将@FormParam传递给RESTful服务?

时间:2012-09-07 09:52:04

标签: java web-services rest

免责声明:我完全搜索了这个问题的答案,是的,我确实找到了另一个问题:https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice。但首先,这个问题是询问Javascript,而我问的是Java,其次,它无论如何都没有答案。所以关于这个问题......

使用RESTful服务,将@QueryParam传递到@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
     */

}

如何在第二种方法中执行注释掉的操作?

注意:假设这些方法不在同一个类或包中。还假设RESTful服务托管在不同的服务器上,而不是运行方法的机器上。因此,您必须访问该方法并以RESTful方式传递值。

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

使用@FormParam可以将表单参数绑定到变量。您可以找到样本here

其次,为了在java方法代码内部调用rest服务,你必须使用jersey client.Example代码可以找到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