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

Jersey (JAX-RS) guide to use @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
JOIN OUR NEWSLETTER
And get notified everytime we publish a new blog post.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top