2011-02-25 99 views
25

按理说我在Java如何访问HTTP请求?

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

: 
: 
: 
} 

这是很好的休息方法,但我不知道是否有一种方法,我可以访问与球衣的完整的HTTP请求,如

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

: 
: 
: 
} 

哪里一些注释会给我完整的HTTP请求来存储一个变量。曾尝试使用@POST,但它似乎没有工作。有什么建议么。

感谢

回答

43

可以使用@Context注释:

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

谢谢sdorra,似乎有伎俩。最后一个问题(如果需要,可以将其作为新问题公开)我如何访问请求主体本身? – John 2011-02-28 11:17:16

+1

该机构是由@Consumes注释控制: '@Path( “身体”) 公共类BodyResource { @POST @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) 公共字符串得到(String body) { System.out.println(body); return“The Body:”.concat(body); } }' – sdorra 2011-02-28 12:12:27

+0

如果你正在使用maven,你应该有一个相关性: 的javax.servlet 的javax.servlet-API 3.1.0 2014-08-28 11:59:10

1

我写了一个辅助函数来解决这个问题。简单地提取请求标题并将它们放置在地图中。

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