En plus de définir @ HeaderParam
, @ PathParam
et @ QueryParam
individuellement dans chaque méthode de ressource, ils peuvent être injectés en fonction du constructeur et stockés dans les membres de la classe de ressources (si la classe de ressources n'est pas Singleton).
Cependant, le corps (entité) et @FormParam (faisant référence au corps) ne peuvent pas être injectés dans le constructeur et doivent être reçus comme argument de la méthode de ressource.
class Resource {
Resource(@PathParam("path") String pathParam) { ... }
}
Afin de faire référence aux informations de requête HTTP brutes (méthode HTTP, chemin, paramètre de requête, en-tête, corps du format de flux) dans la méthode de ressource, il est facile d'utiliser HttpServletRequest
comme injection de dépendance.
class Resource {
@Inject
private HttpServletRequest request;
}
Cependant, cette méthode dépend du conteneur Servlet, donc pour gérer avec l'API JAX-RS, procédez comme suit.
class Resource {
@Context Request request;
@Context UriInfo uriInfo;
@Context HttpHeaders httpHeaders;
public Response post(InputStream body) {
//Méthode HTTP
request.getMethod();
//chemin
uriInfo.getPath();
//Paramètres de requête
uriInfo.getQueryParameters();
//entête
httpHeaders.getRequestHeaders();
//Corps (InputStream)
body;
...
}
}