Grails:仅限POST或GET httprequest参数

时间:2014-01-18 12:28:07

标签: spring grails

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

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

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

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

2 个答案:

答案 0 :(得分: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 ->

            }
        }
    }
}

答案 1 :(得分:0)

即使使用Grails,你也在使用Servlet来混合POST和GET。我不记得有什么东西(除了重新分析查询字符串)可以帮助你。