2013-02-02 92 views
0

我正在編寫一個控制器,可以處理不同類型的請求。Grails:使用未知數的鍵值對處理請求

因此,我希望能夠在請求中獲取鍵值對的數量,然後將它們作爲某種形式的對象(列表或某種迭代器)進行回溯,以便通過它們循環檢索他們的關鍵和價值觀並妥善處理。

喜歡的東西如下:

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); 
} 

謝謝

回答

1

幾件事情需要在這裏提一下。首先,這一切都取決於POST數據的編碼。例如,如果您以JSON格式發送數據,將其轉換爲地圖與將數據發送爲Content-Type: application/x-www-form-urlencoded(如果您從HTML表單發送數據的情況下)不同。

如果後者是真實的,您需要做的唯一的事情就是使用來自普通舊版ServletRequestgetParameterMap()。 Grails只會覆蓋這個方法來提供一個與路由很好地配合的數據結構,即GrailsParameterMap

+0

謝謝你,是的,我本來應該更具體的瞭解,我想找回什麼類型的數據。實際上,我試圖檢索Content-Type:application/x-www-form-urlencoded(通過post或key-value對發送的HTML表單類數據,比如我喜歡稱之爲)。我將添加我的最終代碼作爲單獨的答案。 – Chopo87

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; 
}