2015-04-01 65 views
0

我有處理表單提交控制方法:Spring MVC:@RequestMapping:如何捕捉Map參數?

@RequestMapping(method = {RequestMethod.POST}) 
    public String submitForm(...){...} 

但是,我有一個新的測試用例:

如果表具有參數ProductData呼叫控制器方法submitFormWithProductData。而我在這方面遇到困難,因爲ProductDataMap。現場ProductData場形式標記看起來像:

<input type="text" name="productData['param1']"> 
<input type="text" name="productData['param2']"> 

而且我不知道,如何爲submitFormWithProductData方法來創建正確的@RequestMapping註釋。

我曾嘗試:

@RequestMapping(method = {RequestMethod.POST}, params="productData") 

@RequestMapping(method = {RequestMethod.POST}, params="productData[]") 

,但我沒能成功。

+0

請你解釋一下你爲什麼要做到這一點(不同的處理請求)?也許有另一種方法可以滿足你的要求 – 2015-04-01 10:09:05

+0

當然,我可以解釋一下:目前,我已經開箱控制器方法submitForm;然後,我在現有的html表單中添加了新功能(productData Map),我需要處理這些數據。我無法修改oob代碼,所以我剛剛創建了新的方法submitFormWithProductData,但是如何調用它... – user471011 2015-04-01 10:15:35

回答

1

productData必須是模型對象的屬性。

public class FormModel { 
    private Map<String,String> productData = ...; 
    ... 
} 

根據這一點,你必須創建一個處理方式類似:

@RequestMapping(....) 
public String submitFormWithProductData(FormModel formModel) { 
    .... 
} 

春天將productData參數自動綁定到FormModel對象根據屬性。

但我不知道爲什麼你想要以不同的方式處理它。你可以添加一個隱藏的輸入字段productDataSubmitted,並添加以下處理:

@RequestMapping(method = {RequestMethod.POST}, params="productDataSubmitted") 
+0

您有:FormModel類和submitForm(FormModel)處理程序 - 它們是開箱即用的,也就是說,您可以不修改它們,好嗎?你可以添加FormWithProductDataModel extends FormModel,同意?並添加FormWithProductDataModel屬性Map productData,同意?那麼你需要在服務器端處理這個表單,你不能修改默認處理程序,所以,你會添加新的方法submitFormWithProductData(FormWithProductDataModel表單),是嗎?你將用於新處理程序的@RequestMapping參數是什麼? – user471011 2015-04-01 10:51:22

1

使用@RequestBody Map<String,String> productData作爲參數INT控制器方法。

這裏是一個BlogRead more...

例如:

@RequestMapping(value = "/add", method = RequestMethod.POST, consumes="application/json") 
public void submitForm(@RequestBody Map<String,String> productData, Model model) { 
    // implementation omitted 
}