2011-02-25 2 views
25

Dites normalement j'ai une méthode de repos en javaComment accéder à la requête HTTP?

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

: 
: 
: 
} 

ce qui est bien, mais je me demande est-il un moyen que je peux accéder à la demande HTTP complète avec le maillot tels 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 à stocker dans une variable. J'ai essayé d'utiliser @POST mais cela ne semble pas fonctionner. Aucune suggestion.

Merci

Répondre

43

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 
} 
+1

Merci sdorra qui semble faire l'affaire. Une dernière question, (peut ouvrir ceci comme une nouvelle question si besoin est) comment j'accéderais au corps de demande lui-même? – John

+1

Le corps est contrôlé par le @Consumes Annotation: '@Path ("corps") public class BodyResource { @POST @Consumes (MediaType.TEXT_PLAIN) @Produces (MediaType.TEXT_PLAIN) public string get (Corps de chaîne) { System.out.println (body); return "Le corps:" .concat (corps); }} ' – sdorra

+0

si vous utilisez Maven, vous devriez avoir une dépendance pour: javax.servlet javax.servlet-api 3.1.0

0

Si vous voulez obtenir le corps de la demande, vous pouvez utiliser la pointe doublée dans ce post: How to get full REST request body using Jersey?

Si vous devez en savoir plus sur la requête elle-même, vous pouvez essayer l'annotation @Context comme mentionné par sdorra.

1

J'ai écrit une fonction d'aide pour résoudre ce problème. Extrait simplement les en-têtes des requêtes 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; 
} 
Questions connexes