It will reduce our code and improve readability, if we define injections of various @*Param values in a distinct class and reuse that in various resources. In Jersey (JAX-RS) we can achieve same using @BeanParam injection.
Define Class for aggregating multiple @*Param values
**File: BeanParamModel.java**
package in.geekmj.model;
import javax.ws.rs.CookieParam;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import org.jvnet.hk2.annotations.Optional;
public class BeanParamModel {
@HeaderParam(value = "header-value")
private String headerValue;
@CookieParam(value = "cookie-value")
private String cookieValue;
private String pathValue;
private String param1;
public BeanParamModel(@PathParam("path-value") @Optional String pathValue,
@QueryParam("param1") @Optional String param1) {
this.pathValue = pathValue;
this.param1 = param1;
}
public String getHeaderValue() {
return headerValue;
}
public void setHeaderValue(String headerValue) {
this.headerValue = headerValue;
}
public String getCookieValue() {
return cookieValue;
}
public void setCookieValue(String cookieValue) {
this.cookieValue = cookieValue;
}
public String getPathValue() {
return pathValue;
}
public void setPathValue(String pathValue) {
this.pathValue = pathValue;
}
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1;
}
}
Inject above class with @BeanParam in resource class
package in.geekmj.resource;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.springframework.stereotype.Component;
import in.geekmj.model.BeanParamModel;
@Path("/bean-param")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Component
public class BeanParamResource {
@GET
@Path("{path-value}")
public Response getResponse(@BeanParam BeanParamModel beanParam) {
Map<String, String> parametersValues = new HashMap<String, String>();
parametersValues.put("header-value", beanParam.getHeaderValue());
parametersValues.put("cookie-value", beanParam.getCookieValue());
parametersValues.put("path-value", beanParam.getPathValue());
parametersValues.put("param1", beanParam.getParam1());
return Response.ok(parametersValues).build();
}
}
Testing GET request for URL https://localhost:8080/bean-param/path-value-random?param1=paramvalue1 with Postman Chrome Plugin.