The JAX-RS resource methods return type is generally based on the entity being operated on. For example, getDepartment returns the Department type. This return value is wrapped by JAX-RS in the default response message body and response status; additional metadata like content length, media type are added by the default JAX-RS implementation provider, which is not transparent to us. If we intend to explicitly control the response sent back to the client, the resource methods can return an instance of javax.ws.rs.core.Response. The Response class is an abstract class which contains methods required to get access to the different attributes of Response sent back to the client. Listed here are a few key methods of Response class:
Method |
Purpose |
getCookies |
Get cookies set on the response message. |
getDate |
Get the response message date. |
getEntity |
Get the response message entity object. In case of HTTP, this will be the entity object set in the HTTP message body. |
getHeaders |
Get a view of the response headers and their object values. |
getHeaderString |
Get a message header value as a string value. |
getLength |
Get the content length value. |
getMediaType |
Get the media type of the message entity. |
getStatus |
Get the status code associated with the response. |
getStatusInfo |
Get the complete status information associated with the response. |
Instances of Response object cannot be created directly; instead they are created from javax.ws.rs.core.Response.ResponseBuilder instances returned by one of the following static helper methods of the Response class:
Method |
Purpose |
ok |
Create a new ResponseBuilder with the OK status. |
status |
Create a new ResponseBuilder with the supplied status. |
serverError |
Create a new ResponseBuilder with the server error status. |
temporaryRedirect |
Create a new ResponseBuilder for a temporary redirection to the specified URI. |
noContent |
Create a new ResponseBuilder for an empty response. |
notAcceptable |
Create a new ResponseBuilder for a not acceptable response. |
notModified |
Create a new ResponseBuilder with a not-modified status. |
The javax.ws.rs.core.Response.ResponseBuilder class provides easy-to-use utility methods for creating the javax.ws.rs.core.Response instance by using a builder pattern. ShoppingService illustrates the usage of javax.ws.rs.core.Response.ResponseBuilder to construct the javax.ws.rs.core.Response with the OK status:
@Path("/shopping")
public class ShoppingService {
@GET
public Response productExists((@PathParam("productId") String productId) {
NewCookie cookie = new NewCookie("shopping-id", "uid");
//Check if the specified product exists
ResponseBuilder builder = Response.ok("Y", "text/plain");
return builder.cookie(cookie).build();
}
}