Red Hat Training
A Red Hat training course is available for Red Hat Fuse
52.2.2. 使用 URI
概述
使用 URI 上下文的一个主要优点是,它提供对服务的基本 URI 以及所选资源的 URI 的路径片段。这些信息可用于很多目的,例如根据 URI 或计算 URI 返回作为响应的一部分的处理决策。例如,如果请求的基本 URI 包含 .com 扩展,该服务可能会决定使用美国金属,以及基本 URI 是否包含 .co.uk 扩展可能会决定我们 British Pounds。
UriInfo 接口提供了访问 URI 部分的方法:
- 基本 URI
- 资源路径
- 完整 URI
获取 Base URI
Base URI 是发布该服务的根 URI。它不包含在任何服务的 @Path 注释中指定的 URI 的任何部分。例如,如果实现 例 47.5 “禁用 URI decoding” 中定义的资源的服务已发布到 http://fusesource.org,且在 http://fusesource.org/montersforhire/nightstalker?12 中发出了一个请求,基本 URI 为 http://fusesource.org。
表 52.2 “访问资源基本 URI 的方法” 描述返回基本 URI 的方法。
获取路径
请求 URI 的路径 部分是用来选择当前资源的 URI 部分。它不包括基础 URI,但包含 URI 中包含的任何 URI 模板变量和列表参数。
路径的值取决于所选资源。例如,在 获取资源路径 中定义的资源路径将是:
-
rootPath— /monstersforhire/ getterPath— /mostersforhire/nightstalkerGET请求在 /monstersforhire/nightstalker 上进行。putterPath— /mostersforhire/911PUT请求在 /monstersforhire/911 上进行。
获取资源路径
@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();
...
}
...
}
表 52.3 “访问资源路径的方法” 描述返回资源路径的方法。
表 52.3. 访问资源路径的方法
| 方法 | Desription |
|---|---|
|
| 将资源的路径返回为解码 URI。 |
|
|
返回资源的路径。指定 |
|
|
将解码的路径返回为 javax.ws.rs.core.PathSegment 对象列表。路径的每个部分(包括列表)都放在列表中的一个唯一条目中。
例如,资源路径 box/round#tall 将导致一个含有三个条目的列表: |
|
|
将路径返回为 javax.ws.rs.core.PathSegment 对象列表。路径的每个部分(包括列表)都放在列表中的一个唯一条目中。指定
例如,资源路径 box#tall/round 将生成三个条目的列表: |
获取完整请求 URI
表 52.4 “访问完整请求 URI 的方法” 描述返回完整请求 URI 的方法。您可以选择返回请求 URI 或资源的绝对路径。区别在于,请求 URI 包含附加到 URI 的任何查询参数,且绝对路径不包含查询参数。
表 52.4. 访问完整请求 URI 的方法
| 方法 | Desription |
|---|---|
|
|
返回完整的请求 URI,包括查询参数和列表参数,作为 |
|
返回完整的请求 URI,包括查询参数和列表参数,作为 | |
|
|
返回完整的请求 URI,包括列表参数,作为 |
|
返回完整的请求 URI,包括列表参数,作为 |
对于使用 URI http://fusesource.org/montersforhire/nightstalker?12 的请求,getRequestUri () 方法将返回 http://fusesource.org/montersforhire/nightstalker?12。getAbsolutePath () 方法返回 http://fusesource.org/montersforhire/nightstalker。