49.2. Working with the full request URI
Abstract
UriInfo
object. The UriInfo
interface provides functions for decomposing the URI in a number of ways. It can also provide the URI as a UriBuilder
object that allows you to construct URIs to return to clients.
49.2.1. Injecting the URI information
Overview
UriInfo
object is decorated with the @Context
annotation, the URI context for the current request is injected into the UriInfo
object.
Example
Example 49.1. Injecting the URI context into a class field
import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.Path; ... @Path("/monstersforhire/") public class MonsterService { @Context UriInfo requestURI; ... }
49.2.2. Working with the URI
Overview
UriInfo
interface provides methods for accessing the parts of the URI:
- the base URI
- the resource path
- the full URI
Getting the Base URI
@Path
annotations. For example if a service implementing the resource defined in Example 44.5, “Disabling URI decoding” were published to http://fusesource.org and a request was made on http://fusesource.org/montersforhire/nightstalker?12 the base URI would be http://fusesource.org.
Table 49.2. Methods for accessing a resource's base URI
Getting the path
rootPath
— /monstersforhire/getterPath
— /mostersforhire/nightstalkerTheGET
request was made on /monstersforhire/nightstalker.putterPath
— /mostersforhire/911ThePUT
request was made on /monstersforhire/911.
Example 49.2. Getting a resource's path
@Path("/monstersforhire/") public class MonsterService { @Context UriInfo rootUri; ... @GET public List<Monster> getMonsters(@Context UriInfo getUri) { String rootPath = rootUri.getPath(); ... } @GET @Path("/{type}") public Monster getMonster(@PathParam("type") String type, @Context UriInfo getUri) { String getterPath = getUri.getPath(); ... } @PUT @Path("/{id}") public void addMonster(@Encoded @PathParam("type") String type, @Context UriInfo putUri) { String putterPath = putUri.getPath(); ... } ... }
Table 49.3. Methods for accessing a resource's path
Getting the full request URI
Table 49.4. Methods for accessing the full request URI
getRequestUri()
methods would return http://fusesource.org/montersforhire/nightstalker?12. The getAbsolutePath()
method would return http://fusesource.org/montersforhire/nightstalker.
49.2.3. Getting the value of URI template variables
Overview
Methods for getting the path parameters
UriInfo
interface provides two methods, shown in Example 49.3, “Methods for returning path parameters from the URI context”, that return a list of the path parameters.
Example 49.3. Methods for returning path parameters from the URI context
MultivaluedMap<java.lang.String, java.lang.String> getPathParameters();
MultivaluedMap<java.lang.String, java.lang.String> getPathParameters(boolean decode);
getPathParameters()
method that does not take any parameters automatically decodes the path parameters. If you want to disable URI decoding use getPathParameters(false)
.
color
and note
.
Example
Example 49.4. Extracting path parameters from the URI context
import javax.ws.rs.Path; import javax.ws.rs.Get; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; @Path("/monstersforhire/") public class MonsterService @GET @Path("/{type}/{size}") public Monster getMonster(@Context UriInfo uri) { MultivaluedMap paramMap = uri.getPathParameters(); String type = paramMap.getFirst("type"); String size = paramMap.getFirst("size"); } }