web-dev-qa-db-fra.com

Comment accéder à la requête HTTP?

Dites normalement que j'ai une méthode de repos en Java

@POST 
    @Path("/test")
    @Produces(MediaType.APPLICATION_JSON)
    public String showTime(@FormParam("username") String userName) {

:
:
:
}

ce qui est bien, mais je me demande s'il existe un moyen d'accéder à la demande HTTP complète avec un maillot tel que

@POST 
    @Path("/test")
    @Produces(MediaType.APPLICATION_JSON)
    public String showTime(@FormParam("username") String userName,@XXXXXX String httpRequest) {

:
:
:
}

où une annotation me donnerait la requête HTTP complète pour stocker dans une variable. J'ai essayé d'utiliser @POST mais cela ne semble pas fonctionner. Aucune suggestion.

Merci

31
John

Vous pouvez utiliser l'annotation @Context:

@POST 
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String showTime(
    @FormParam("username") String userName,
    @Context HttpServletRequest httpRequest
) {
    // The method body
}
52
sdorra

J'ai écrit une fonction d'aide pour résoudre ce problème. Extrait simplement les en-têtes de demande et les place dans une carte.

private Map<String, String> extractHeaders(HttpServletRequest httpServletRequest) {

    Map<String, String> map = new HashMap<>();
    Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String header = headerNames.nextElement();
        map.put(header, httpServletRequest.getHeader(header));
    }

    return map;
}
1
Teddy Wilson

Si vous souhaitez obtenir le corps de la demande, vous pouvez utiliser l'astuce indiquée dans cet article: Comment obtenir le plein REST corps de la demande en utilisant Jersey?

Si vous avez besoin d'en savoir plus sur la demande elle-même, vous pouvez essayer l'annotation @Context comme mentionné par sdorra.

0
Jan Thomä