Spring MVC:@RequestMapping:如何捕获Map参数?

时间:2015-04-01 10:01:50

标签: spring spring-mvc model-view-controller

我有处理表单提交的控制器方法:

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

但是,我有一个新的测试用例:

如果Form有参数ProductData,则调用控制器方法submitFormWithProductData。我遇到了这方面的困难,因为ProductDataMap。表单标签上的网站ProductData字段如下所示:

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

我不知道如何为@RequestMapping方法创建正确的submitFormWithProductData注释。

我试过了:

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

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

但我没有成功。

2 个答案:

答案 0 :(得分:2)

productData必须是模型对象的属性。

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

根据这个你必须创建一个像这样的处理程序方法:

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

Spring会自动将productData参数绑定到FormModel对象中的相应属性。

但我不知道你为什么要以不同方式处理它。您可以添加隐藏的输入字段productDataSubmitted并添加以下处理程序:

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

答案 1 :(得分:1)

在控制器方法中使用@RequestBody Map<String,String> productData作为参数。

这是BlogRead more...

例如:

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