2011-02-25 190 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; 
}