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 的方法。
方法 | Desription |
---|---|
|
将服务的基本 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 “访问资源路径的方法” 描述返回资源路径的方法。
方法 | 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 的任何查询参数,且绝对路径不包含查询参数。
方法 | 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。