52.2.2. 使用 URI
概述
使用 URI 上下文的一个主要优点是,它提供对服务的基本 URI 和所选资源的 URI 的路径片段的访问。此信息可用于许多目的,例如根据 URI 或计算 URI 做出处理决策,以作为响应的一部分返回。例如,如果请求的基本 URI 包含 .com 扩展,服务可能会决定使用美国资金,并且基本 URI 包含 .co.uk 扩展是否可能决定我们英国的 Pounds。
UriInfo 接口提供了访问 URI 的部分方法:
- 基本 URI
- 资源路径
- 完整 URI
获取 Base URI
基础 URI 是发布该服务的根 URI。它不包含在 service 的 @Path
注释中指定的任何 URI 部分。例如,如果实施 例 47.5 “禁用 URI 解码” 中定义的资源的服务被发布到 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。