我的服务器代码如下:
@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不支持多个参数?)
非常感谢任何帮助。
答案 0 :(得分:1)
这是我将如何做到的 服务器代码
您将拥有如下服务器代码:
@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¶m2=2";
String request = "param1=" + param1+ "¶m2=" + 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) {
...
}