2011-02-25 19 views
25

Di normalmente tengo un método descanso en java¿Cómo accedo a la solicitud HTTP?

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

: 
: 
: 
} 

lo cual está bien, sin embargo me pregunto ¿hay alguna manera de acceder a la petición HTTP completa con Jersey como

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

: 
: 
: 
} 

donde alguna anotación me daría la solicitud HTTP completa para almacenar en una variable. He intentado usar @POST pero parece que no funciona. Alguna sugerencia.

Gracias

Respuesta

43

Puede utilizar la anotación @Context:

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

Gracias sdorra que parece hacer el truco. Una última pregunta, (puede abrir esto como una nueva pregunta si es necesario) ¿cómo accedería al cuerpo de la solicitud en sí? – John

+1

El cuerpo es controlado por el @Consumes Anotación: '@Path ("cuerpo") clase pública BodyResource { @POST @Consumes (MediaType.TEXT_PLAIN) @Produces (MediaType.TEXT_PLAIN) public String llegar (String body) { System.out.println (cuerpo); return "The Body:" .concat (cuerpo); }} ' – sdorra

+0

si utiliza experto debe tener una dependencia para: javax.servlet javax.servlet-api 3.1.0

0

Si desea obtener el cuerpo de la petición, se puede usar la punta forrada en este post: How to get full REST request body using Jersey?

Si necesita saber más sobre la solicitud en sí, puede probar la anotación @Context como lo menciona sdorra.

1

Escribí una función auxiliar para abordar esto. Simplemente extrae los encabezados de solicitud y los coloca en un mapa.

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; 
} 
Cuestiones relacionadas