2015-04-01 50 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 
}