[Java] Wie erhalte ich den JAX-RS @Path einer anderen Ressource während eines POST?



Answers

Ich habe ein paar javax.ws.rs.core.UriBuilder-Methoden gefunden, die den Trick gemacht haben, die ich teilen wollte, falls andere diese Frage hatten. Sie sind: UriBuilder.fromResource (OneUserResource.class) und javax.ws.rs.core.UriBuilder.path (Class). Ich habe letzteres in einem One-Shot-Call benutzt:

URI newUserUri = uriInfo.getBaseUriBuilder().path(OneUserResource.class).path("/" + user.getId()).build();
return Response.created(newUserUri).build();
Question

Ich habe zwei REST-Klassen für einen einfachen Webservice (Jersey und GlassFish), der Benutzerressourcen umfasst - einen für alle Benutzer (z. B. eine Factory für @POSTing) und einen für einzelne Benutzer (z. B. @GET, @PUT, @). LÖSCHEN). Sie sind am:

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

beziehungsweise. Beim POSTing zu AllUsersResource möchte ich den Standort (via Response.created(uri).build() ) des neuen Benutzers zurückgeben, zB

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

Meine Frage ist, wie man das macht. AllUsersResource injiziert @Context UriInfo uriInfo, aber das bringt mir @Path info nicht für OneUserResource, sondern nur die des aktuellen Aufrufs ("users"). Die Art und Weise, wie ich es endlich funktionierte, war einfach die Reflexion, aber ich mache mir Sorgen, dass es brüchig und unrein ist:

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

Bei der Suche nach waren die einzigen anderen Dinge, die ich ausprobieren konnte, folgende, ohne Erfolg:

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

Jede Hilfe wäre großartig!




Links