【问题标题】:query parameters cannot be retrieved from request header无法从请求标头中检索查询参数
【发布时间】:2015-05-16 20:26:29
【问题描述】:

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

query string data encapsulated in http request header in GET

我从中了解到的是:

(1)Get请求没有body,只包含header部分

(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”。

有人可以解释为什么查询参数在标头部分发送时无法从标头中检索到的原因吗?

【问题讨论】:

  • 查询参数构成 URL 的一部分,作为键值对的集合。它们不是 HTTP 标头的一部分。我认为如果从您引用的句子中删除单词标题会更清楚。

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


【解决方案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";
}

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2021-10-06
    • 2020-01-09
    相关资源
    最近更新 更多