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/nightstalkerTheGETrequest was made on /monstersforhire/nightstalker.putterPath— /mostersforhire/911ThePUTrequest 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");
}
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.