无法从请求标头中检索查询参数

时间:2015-03-14 10:15:53

标签: java spring-mvc java-ee servlets http-headers

我正在读一本书Java Web Services。我发现了一个声明

query string data encapsulated in http request header in GET

我从中理解的是:

(1)获取请求没有正文,它只包含标题部分

(2)在GET中发送数据时,可以使用查询字符串

现在我清楚这些概念。但我想用代码确认它。

我在Spring MVC中有一个控制器,我发送了一个像

这样的请求

http://localhost:8080/test?abc=1

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(HttpServletRequest req) {

    String abc1 = req.getHeader("abc");
    String abc2 = req.getParameter("abc");
    return "login";
}

abc1为空

abc2是" 1"

因此,根据上述声明,我应该将abc1作为" 1"。

有人可以解释一下在标题部分发送查询参数时无法从标题中检索查询参数的原因吗?

1 个答案:

答案 0 :(得分:1)

正如@JamesB在评论中提到的,函数HttpServletRequest.getHeader用于检索HTTP头。它与请求参数不同。所以getParameter是检索查询参数的方法。你在第二次发言中体验到了这一点。

但是,我看到了更广泛的问题。 使用Spring MVC时,不应使用低级servlet API。 请改用Spring Constructs:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@RequestParam("abc") int abc) {
    //use abc
    return "login";
}