在 Spring MVC 控制器中获取查询字符串值

Posted

技术标签:

【中文标题】在 Spring MVC 控制器中获取查询字符串值【英文标题】:Get Query String Values in Spring MVC Controller 【发布时间】:2013-07-29 21:19:25 【问题描述】:

我有一个这样的引荐来源网址:

http://myUrl.com?page=thisPage&gotoUrl=https://yahoo.com?gotoPage

如何在我的 Spring Controller 中获取“page”和“gotoUrl”的值?

我想将这些值存储为变量,以便以后重复使用。

【问题讨论】:

看看@RequestParam注解。 你真的是想说“推荐人”吗?如果是这样,则接受的答案是错误的。 您可能应该对 gotoUrl 的值进行 URL 编码(尽管我不确定在这个特定示例中它在功能上是否重要)。 【参考方案1】:

在 SpringMVC 中,您可以使用 @RequestParam 注释指定查询字符串中的值被解析并作为方法参数传入。

public ModelAndView getPage(
    @RequestParam(value="page", required=false) String page, 
    @RequestParam(value="gotoUrl", required = false) String gotoUrl) 

【讨论】:

【参考方案2】:

您可以使用 HttpServletRequest 接口中的getParameter() 方法。

例如;

  public void getMeThoseParams(HttpServletRequest request)
    String page = request.getParameter("page");
    String goToURL = request.getParameter("gotoUrl");

【讨论】:

如果我想将请求作为参数传递,这是有道理的。但是,如果我不想将 HttpServletRequest 作为参数传递给我的控制器操作,有没有办法检索参数? 虽然这个答案在技术上是正确的,但它不是使用 Spring 的推荐方法,@Affe 的答案更重要。 @AkshaySinghal 除非您事先不知道参数但您需要一种方法来处理它们 - 然后您可以使用 request.getParameterNames()request.getParameterMap() @LukaszWiktor 很抱歉,我不理解该评论。它似乎与任何问题或答案无关。 @AkshaySinghal 我想说 Raunak 的回答很有帮助。就我而言,我不知道参数的确切名称。我需要创建一个可以读取任何参数的端点。当我注意到这个答案时,我还发现了我之前评论中提到的两种方法。【参考方案3】:

在 Spring MVC 控制器中获取QueryString

这是 Liferay 门户特定的解决方案,它有效。

查询字符串示例:?reportTypeId=1&reportSeqNo=391

为了在Liferay Portal中获取reportSeqNo的值,我们需要获取Original Servlet Request。

String reportSeq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)).getParameter("reportSeqNo");

【讨论】:

以上是关于在 Spring MVC 控制器中获取查询字符串值的主要内容,如果未能解决你的问题,请参考以下文章

java - 在spring mvc中按名称获取cookie值

类中的字段值不会使用 Spring Boot MVC 控制器更新

在几秒钟内从 Spring MVC 中的表中获取 400K 数据

在spring mvc测试中访问请求体和请求头

从查询字符串中获取参数

Spring mvc @PathVariable