Grails:处理具有未知数量的键值对的发布请求

时间:2013-02-02 12:58:14

标签: grails http-post

我正在编写一个能够处理不同类型的帖子请求的控制器。

因此,我希望能够在请求中获取键值对的数量,然后将它们作为某种形式的对象(列表或某种迭代器)进行检索,以便我可以循环遍历它们检索它们键和值并适当地处理它们。

如下所示:

def sz = request.size  // may or may not be necessary, but would still like to know how
def keyValPairs = request.listOfPosts
for (def keyVal : keyValPairs) {
    def key = keyVal.getKey();
    def val = keyVal.getVal();
    doSomething(key, val);
}

谢谢

2 个答案:

答案 0 :(得分:1)

这里要提几件事。首先,这一切都取决于POST数据的编码。例如,如果您以JSON格式发送数据,则将其转换为地图与将其作为Content-Type: application/x-www-form-urlencoded发送的情况不同(如果您从HTML表单发送数据,就是这种情况)。

如果后者属实,那么您唯一需要做的就是使用普通旧ServletRequest中的getParameterMap()。 Grails只会覆盖此方法,以提供与路由良好匹配的数据结构,即GrailsParameterMap

答案 1 :(得分:0)

所以一个示例解决方案是:

def controllerFunction() {

    def enu = request.getParameterMap();
    String msg = "";

    for (def obj : enu) {
        msg += "\n<br/> Object key: " + obj.key;
        msg += "\n<br/> Object value: " + obj.value[0]; // [0] seems to remove some problematic square brackets that wrap around the value
        msg += "\n<br/> ";                  
    }

    render rtn; 
}