【问题标题】:Grails: POST or GET httprequest params onlyGrails:仅 POST 或 GET httprequest 参数
【发布时间】:2014-01-18 21:54:21
【问题描述】:

在控制器和 gsp 中有两个可用的变量:

  • params - tahat 包含所有参数的映射(来自查询字符串的 GET 和来自表单的 POST)
  • request - HttpServletRequest 对象

如何获取仅 POST 参数或仅 GET(查询字符串)参数?我需要两种类型的参数,但在不同的地图中。

我知道,HttpServletRequest 对象包含有关查询字符串的信息,但我正在寻找没有实现查询字符串解析器的解决方案。

【问题讨论】:

    标签: spring grails


    【解决方案1】:

    我通过使用org.codehaus.groovy.grails.web.util.WebUtils 解析查询字符串解决了这个问题,然后我将这些数据放入HttpServletRequest 属性中。

    现在我可以使用request.getAttribute('paramsGet')request.getAttribute('paramsPost')

    Grails 过滤器非常有用,所以:

    package com.selly.filters
    
    import org.codehaus.groovy.grails.web.util.WebUtils
    
    class ParamsFilters {
    
        List globalParams = [
            "controller",
            "action",
            "format"
        ]
    
        def filters = {
            all(controller:'*', action:'*') {
                before = {
                    Map paramsRequest = params.findAll {
                        return !globalParams.contains(it.key)
                    }
    
                    Map paramsGet = WebUtils.fromQueryString(request.getQueryString() ?: "")
                    Map paramsPost = paramsRequest.minus(paramsGet)
    
                    request.setAttribute('paramsGet', paramsGet)
                    request.setAttribute('paramsPost', paramsPost)
    
                    //println request.getAttribute('paramsGet')
                    //println request.getAttribute('paramsPost')
                }
                after = { Map model ->
    
                }
                afterView = { Exception e ->
    
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      即使使用 Grails,您也在使用混合了 POST 和 GET 的 Servlet。而且我不记得看到对您有帮助的东西(除了重新解析查询字符串)。

      【讨论】:

      • 我已经设法解决了这个问题。不幸的是解析查询字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多