Jersey (JAX-RS) @BeanParam to inject class with aggregated @*Param injections

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.

Aggregate @*Param injections in one class and use @BeanParam to inject that class in Resources.

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.

 Response for URI /bean-param/{path}

References

  1. Official Jersey Documentation

  2. Download the Full Project

  3. Follow Project On Github

Leave a Comment

Your email address will not be published.