Tengo dos clases REST para un servicio web simple (Jersey y GlassFish) que involucra recursos de usuario: uno para operar en todos los usuarios (por ejemplo, una fábrica para @POSTing) y otro para usuarios individuales (por ejemplo, @GET, @PUT , @BORRAR). Están en:¿Cómo obtengo JAX-RS @Path de un recurso diferente durante un POST?
@Stateless @Path("users") public class AllUsersResource {...}
@Stateless @Path("user") public class OneUserResource {...}
respectivamente. Al exponer AllUsersResource quiero devolver la ubicación (a través de Response.created(uri).build()
) del nuevo usuario, por ejemplo,
http://localhost:8080/.../user/152
Mi pregunta es cómo hacer esto. AllUsersResource inyecta @Context UriInfo uriInfo, pero eso no me proporciona información de @Path para OneUserResource, solo la de la llamada actual ("usuarios"). La forma en que finalmente se consiguió poner en funcionamiento era simplemente utilizar la reflexión, pero me preocupa es frágil y impuro:
OneUserResource.class.getAnnotation(Path.class).value();
Buscando Stackoverflow las únicas otras cosas que encontré a tratar fueron los siguientes, sin éxito:
- com.sun.jersey.api.core.ResourceContext
- javax.ws.rs.core.UriInfo.getMatchedResources()
- @ javax.inject.Inject OneUserResource oneUserRes;
¡Cualquier ayuda sería excelente!
El problema con ambos métodos es que ambos requieren clases de recursos ** root ** para que funcionen. No funcionarán si los usa desde un sub-recurso (se lanza 'IllegalArgumentException'). Entonces, si usó un sub-recurso que manejó la solicitud POST; y si desea devolver un '201' con el encabezado' Ubicación', todavía no ha tenido suerte :( – curioustechizen