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

This is a part of Jersey (JAX-RS) Restful Web Services Development Guides series. Please read Jersey + Spring Boot getting started guide.

@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 http://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 http://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
Download Icon SmallDownload the Full ProjectGithub IconFollow Project On Github

Leave a Reply

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