在REST调用中传递多个参数

时间:2015-05-08 14:20:54

标签: rest jersey jax-rs

我的服务器代码如下:

@POST
@Path("/getMapping")
public ListResponse getMapping(Long id, String name, String clientName, String instanceName) {
    ListResponse response = null;
    try {
        response = new ListResponse();
        List<Mappings> mappings = service.getMapping(id, name, clientName, instanceName);
        response.setStatusCode(SUCCESS);
        response.setMappings(mappings);
    } catch (Exception e) {
        setResponseErrors(response, e);
    }
    return response;
}

我正在使用Jersey REST客户端,但我不认为有一个选项可以在post方法中传递多个params,如:

ClientResponse clientResponse = webResource.type(XML_TYPE).post(ClientResponse.class, id, name, clientName, instanceName);

有没有办法实现这个目标?

在这种情况下,我可以使用 MultiValuedMap @QueryParams ,但在其他情况下,多个参数是更复杂的对象。此外,将所有内容包装在&#34; paramContainer&#34;将是一个低效的解决方案,因为有这么多这样的方法有多个具有不同组合的参数。

(顺便说一下,为什么REST不支持多个参数?)

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这是我将如何做到的 服务器代码

  • 1.1应该使用@FormParam来声明@FormDataParam中的参数
  • 1.2如果加密使用@Consumes(MediaType.MULTIPART_FORM_DATA),POST会更好

您将拥有如下服务器代码:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/getMapping")
public ListResponse getMapping(@FormParam("id")Long id, @FormParam("name") String name, @FormParam("clientName") String clientName, @FormParam("instanceName") String instanceName) {
    ListResponse response = null;
    try {
        response = new ListResponse();
        List<Mappings> mappings = service.getMapping(id, name, clientName, instanceName);
        response.setStatusCode(SUCCESS);
        response.setMappings(mappings);
    } catch (Exception e) {
        setResponseErrors(response, e);
    }
    return response;
}

客户代码

Form form = new Form();
form.add("id", "1");    
form.add("name", "je@rizze.com");
form.add("clientName","firefox");
form.add("instanceName","node45343.rizze.com");

ClientResponse response = webResource
  .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
  .post(ClientResponse.class, form); 

享受:)

答案 1 :(得分:0)

以上对jeorfevre的回答:

如果您正在使用Jersey 1.x,这就是它的工作原理:

客户端:(纯Java):

public Response testPost(String param1, String param2) {
    // Build the request string in this format:
    // String request = "param1=1&param2=2";
    String request = "param1=" + param1+ "&param2=" + param2;
    WebClient client = WebClient.create(...);
    return client.path(CONTROLLER_BASE_URI + "/test")
            .post(request);
}

<强> 服务器:

@Path("/test")
@POST
@Produces(MediaType.APPLICATION_JSON)
public void test(@FormParam("param1") String param1, @FormParam("param2") String param2) {
    ...
}