java – 在POST期间如何获取不同资源的JAX-RS @Path?

我有两个REST类用于一个简单的Web服务(Jersey和GlassFish),涉及用户资源 – 一个用于所有用户(例如,@POSTing的工厂),另一个用于个人用户(例如@GET,@PUT,@删除).他们在:

@Stateless @Path("users") public class AllUsersResource {...}
@Stateless @Path("user") public class OneUserResource {...}

分别.当POSTing到AllUsersResource时,我想返回新用户的位置(通过Response.created(uri).build()),例如,

http://localhost:8080/.../user/152

我的问题是如何做到这一点. AllUsersResource注入@Context UriInfo uriInfo,但是不能让OneUserResource的@Path信息,只有当前调用(“users”)的信息.我终于得到它的工作方式只是使用反思,但我担心它是脆弱和不洁净的:

OneUserResource.class.getAnnotation(Path.class).value();

搜索StackOverflow我发现尝试的唯一的其他事情是以下,没有成功:

> com.sun.jersey.api.core.ResourceContext
> javax.ws.rs.core.UriInfo.getMatchedResources()
> @ javax.inject.Inject OneUserResource oneUserRes;

任何帮助将是非常棒的!

最佳答案
您可以使用UriBuilder.fromresource(),但是这只有在提供的Resource类是根资源(这在javadoc中被清楚地提到)时才有效.即使你在一个子资源类中,我也找到了一种方法:

@POST
@Consumes({MediaType.APPLICATION-XML, MediaType.APPLICATION-JSON})
public Response createUser(final User user, @Context UriInfo uriInfo) {
    // persist the user here
    URI uri = uriInfo.getAbsolutePathBuilder().path(user.getId()).build();
    return Response.created(uri).build();
}

转载注明原文:java – 在POST期间如何获取不同资源的JAX-RS @Path? - 代码日志