【问题标题】:explicitly get post parameter or query parameter in controller method在控制器方法中显式获取 post 参数或查询参数
【发布时间】:2017-04-21 15:43:42
【问题描述】:

我正在使用 @RequestParam 注释来指示 Spring MVC 将“Web 请求参数”(Javadoc 调用它们)注入到我的代码中的方法调用中:

@RequestMapping(path="/signup-submit", method=RequestMethod.POST)
public String signupSubmit(@RequestParam(value="originURL", required=true) String originURL ...) {
...

我对这个注释显然适用于 POST 参数和 URL 查询参数这一事实感到困扰。 IE。查看上面的代码,无法判断 originURL 是 POST 正文参数还是 URL 查询参数。是否有一个注释可以用来从其中一个或另一个中显式获取它?

这就是为什么我也将“网络请求参数”放在引号中的原因,因为我认为这不是一个技术术语,我猜它是在“某些参数在 POST 方法主体中传递或作为 URL 中的查询参数”。

【问题讨论】:

  • @PathVariable 怎么样?你可以使用 path="/signup-submit/{originURL}" 和 @PathVariable(value="originURL") String originURL
  • @StanislavL 我认为这仅适用于 URL 路径部分,不适用于查询参数。此外,只有当它作为 POST 正文参数 only 存在时,我如何才能得到它?

标签: java spring spring-mvc spring-4


【解决方案1】:

与 cularis 所说的相反,参数映射中可能两者兼有。

我看到的最好方法是代理 parameterMap 并为每个参数检索检查 queryString 是否包含“&?=”。

请注意,正如 Qerub 指出的那样,在进行此检查之前,参数名称需要进行 URL 编码。

这样可以节省您的解析,并且仍然只为您提供 URL 参数。

方式可以是获取查询字符串..

    public List<Topic> getTopics(HttpServletRequest req) {
            String queryString = req.getQueryString(); 
    .....

关于“Web-Request-Parameter”(@RequestHeader),你是对的,因为它由两个参数组成,即要么是查询的一部分,要么是请求正文的一部分。

【讨论】:

    【解决方案2】:

    不是您问题的确切解决方案。但似乎有一个简单的破解方法。您可以使用@RequestBody。这仅查找请求正文。如果在请求正文中没有找到参数,您可以确定它来自请求参数。

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多