Reputation: 211
My server code is as:
@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;
}
I am using Jersey REST client, but I dont think there is an option to have multiple params passed in the post method like:
ClientResponse clientResponse = webResource.type(XML_TYPE).post(ClientResponse.class, id, name, clientName, instanceName);
Is there a way to accomplish this?
I could use MultiValuedMap or @QueryParams in this case, but there are other cases where multiple params are more complex Objects. Also, wrapping all in a "paramContainer" will be an inefficient solution since there are so many such methods with multiple params with different combinations.
(As an aside, why would REST not support multiple params?)
Any help greatly appreciated.
Upvotes: 1
Views: 5094
Reputation: 2209
An addition to jeorfevre's answer above:
In case you're using Jersey 1.x, this is how it works:
Client: (pure 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);
}
Server:
@Path("/test")
@POST
@Produces(MediaType.APPLICATION_JSON)
public void test(@FormParam("param1") String param1, @FormParam("param2") String param2) {
...
}
Upvotes: 0
Reputation: 2316
here is how I'll do it SERVER CODE
you will have a server code like this :
@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;
}
CLIENT CODE
Form form = new Form();
form.add("id", "1");
form.add("name", "[email protected]");
form.add("clientName","firefox");
form.add("instanceName","node45343.rizze.com");
ClientResponse response = webResource
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.post(ClientResponse.class, form);
enjoy :)
Upvotes: 1