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:
- Jersey (v 2.21)
- Gradle Build System (v 2.9)
- Spring Boot (v 1.3)
- Java (v 1.8)
- 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
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 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
}
}