Working with request cookie in Jersey (JAX-RS) guide

Usually RESTful web services will not use request cookie. There might be some cases where we need it.

We had tested or used following tools and technologies in this project:

  1. Jersey (v 2.21)
  2. Gradle Build System (v 2.9)
  3. Spring Boot (v 1.3)
  4. Java (v 1.8)
  5. Eclipse IDE

@CookieParam annotation for getting individual Request Cookies

In Jersey Resource RequestCookiesResource class, we can inject cookie value using @CookieParam at instance variable and method parameter level. We use it similar to  @HeaderParam, @QueryParam or other @*Param annotation.

getRequestCookie method implements API URI /request-cookie. When API request pass cookies with name token and content-type, response gives back cookies and their values in JSON format.

File: RequestCookiesResource.java

package in.geekmj.resource;

import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.CookieParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;

@Path("/request-cookie")
@Produces(MediaType.APPLICATION\_JSON)
public class RequestCookiesResource {

	/*
	 * We can inject request cookie as an instance variables using @CookieParam
	*/

	@CookieParam("token")
	private String token;

	/* We can inject request cookie values in method using @CookieParam */
	@GET
	public Map<string, string=""> getRequestCookie(@</string,>CookieParam("content-type") String contentType) {

		Map<string, string=""> requestCookies = new HashMap<string, string="">();
		requestCookies.put("token", token);
		requestCookies.put("contentType", contentType);
		return requestCookies;
	}
}

Testing https://localhost:8080/request-cookie API using Postman.

Note: To learn how to send cookies along with API request using Postman, please read this useful article.

Jersey get individual request cookies Jersey get individual request cookies

Response:

{
  "contentType": "text/html",
  "token": "dummy-token-12345"
}

Getting all Request Cookies in a Map

we can use getCookies method on HttpHeaders to fetch all cookies information in a Map. Using @Context we can inject HttpHeaders at instance variable or method parameter level.

In method getAllRequestCookiesUsingContext we defined URI /request-cookie/all. This API will return all request cookies in JSON format.

File: RequestCookiesResource.java

package in.geekmj.resource;

import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;

@Path("/request-cookie")
@Produces(MediaType.APPLICATION\_JSON)
public class RequestCookiesResource {
	/*
	 * We can get a map of all request headers name and value using HttpHeaders
	 * context injection
	 */

	@SuppressWarnings("rawtypes")
	@GET
	@Path("/all")
	public Map getAllRequestCookiesUsingContext(@Context HttpHeaders headers) {
		return headers.getCookies();
	}
}

Testing https://localhost:8080/request-cookie/all API using Postman.

Get all cookies map Get all cookies map Response:

{
    "name": {
        "name": "name",
        "value": "geekmj",
        "version": 0,
        "path": null,
        "domain": null
    },
    "content-type": {
        "name": "content-type",
        "value": "text/html",
        "version": 0,
        "path": null,
        "domain": null
    },
    "token": {
        "name": "token",
        "value": "dummy-token-12345",
        "version": 0,
        "path": null,
        "domain": null
    }
}

References

  1. What is HTTP Cookie?

  2. Official Jersey Documentation

  3. Download the Full Project

  4. Follow Project On Github

Previous
Next