我如何访问HTTP请求?

时间:2011-02-25 15:03:06

标签: rest jersey

通常说我在java中有一个rest方法

@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但它似乎没有用。任何建议。

由于

3 个答案:

答案 0 :(得分:50)

您可以使用@Context注释:

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

如果您想获取请求正文,可以使用此帖中列出的提示:How to get full REST request body using Jersey?

如果您需要了解有关请求本身的更多信息,可以尝试使用sdorra提到的@Context注释。