Ho due classi REST per un semplice servizio Web (Jersey e GlassFish) che coinvolge risorse utente: una per operare su tutti gli utenti (ad esempio, una factory per @POSTing) e un'altra su singoli utenti (ad esempio, @GET, @PUT , @ELIMINA). Sono a:Come si ottiene JAX-RS @Path di una risorsa diversa durante un POST?
@Stateless @Path("users") public class AllUsersResource {...}
@Stateless @Path("user") public class OneUserResource {...}
rispettivamente. Quando postando AllUsersResource voglio tornare alla posizione (via Response.created(uri).build()
) del nuovo utente, ad esempio,
http://localhost:8080/.../user/152
La mia domanda è come fare questo. AllUsersResource inietta @Context UriInfo uriInfo, ma questo non mi fornisce informazioni @Path per OneUserResource, solo quella della chiamata corrente ("utenti"). Il modo in cui ho finalmente capito di lavoro era semplicemente quello di utilizzare la riflessione, ma sono preoccupato che è fragile e sporco:
OneUserResource.class.getAnnotation(Path.class).value();
Ricerca StackOverflow le uniche altre cose che ho trovato a provare sono stati i seguenti, ma senza successo:
- com.sun.jersey.api.core.ResourceContext
- javax.ws.rs.core.UriInfo.getMatchedResources()
- @ javax.inject.Inject OneUserResource oneUserRes;
Qualsiasi aiuto sarebbe fantastico!
Il problema con entrambi questi metodi è che entrambi richiedono ** classi di risorse ** root per funzionare. Non funzioneranno se li usi da una sotto-risorsa (viene lanciato 'IllegalArgumentException'). Quindi, se hai usato una sotto risorsa che gestiva la richiesta POST; e volevi restituire un '201' con l'header' Location', sei ancora sfortunato :( – curioustechizen