Skip to content
Go back

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.

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 parametersValues = new HashMap();

		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.

References

  1. Official Jersey Documentation

  2. Download the Full Project

  3. Follow Project On Github


Share this post on:

Previous Post
Spring Boot and Jersey (JAX-RS) static files support
Next Post
Jersey (JAX-RS) Java types to consume request parameter values guide