java - 如何以编程方式确定 JAX-RS 资源路径?

标签 java url jax-rs

假设我有一组 JAX-RS 定位器和子定位器,如下所示:

@Path("/users")
public class UserListResource {
   @Path("/{id}")
   public UserResource getCustomer(@PathParam("id") int id) {
      // Find and return user object
   }
}

public class UserResource {
  @GET
  public String get() {...}
}

例如,ID 为 5UserResource 对象的路径为 "/users/5"。在我的系统中,我有几种不同的资源。

现在的问题是:服务器如何找出给定资源的路径?我可以通过某些 JAX-RS API 以编程方式执行此操作,还是必须实现使用反射的代码? (我知道如何做后者,但更喜欢另一种方法。)

  • 当我需要知道路径时,我根本没有请求对象。例如,我有一个计时器,它执行一些后台处理,然后更改域模型中的一些实体,然后将更改的实体(包括它们的路径)通知所有客户端。
  • 我知道在请求的范围内,我可以注入(inject)一个提供此功能的 UriInfo 对象,但我需要提前知道路径(以通知客户不一定需要的更改通过 JAX-RS 资源发生)。
  • 我不想在另一个地方重复路径信息,我也不希望每个资源类型都有一组路径片段常量(在本例中是"/users"“/{id}”)。

最佳答案

当我读到你的问题时,你需要构建一个只知道资源类和 id 参数的 URI。

可以使用 UriBuilder 类来完成,如下所示:

UriBuilder builder=UriBuilder.fromResource(UserListResource.class);
URI uri=builder.path(UserListResource.class,"getCustomer").build(5);

它在引擎盖下使用了反射,因此重构起来并不那么容易,但目前仅此而已。

关于java - 如何以编程方式确定 JAX-RS 资源路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14622609/

相关文章:

apache - 如何在 Jersey、Apache Wink 和 JBoss RESTEasy 之间进行选择?

java - 使用 Spring 3 在应用程序引擎中处理错误 (400)

java - 打印哈希表内的多值数据

java - 在 eclipse 中运行 ant build 导致 cpu 达到峰值并保持在 50%

java - 如何获取URL的特定部分?

iphone - 在应用程序中打开 html 链接

java - 如何在 map 上绘制覆盖特定距离的圆

ruby - 在 Ruby 中比较 URL

java - 如何发布具有相同基地址的多个休息端点?

java - JAX-RS 异常映射器不处理参数转换时抛出的异常?