假设我有一组 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 为 5
的 UserResource
对象的路径为 "/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/