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

Jen*_*ann 5 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() {...}
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Car*_*ini 4

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

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

UriBuilder builder=UriBuilder.fromResource(UserListResource.class);
URI uri=builder.path(UserListResource.class,"getCustomer").build(5);
Run Code Online (Sandbox Code Playgroud)

它在底层使用了反射,因此重构起来并不容易,但这就是目前可用的全部。