SpringMVC:@RequestMapping:如何捕获Map参数



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

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

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

如果Form具有参数ProductData,则调用控制器方法submitFormWithProductData。我在这方面面临困难,因为ProductDataMap。表单标签中的On Site 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[]")

但我没有成功。

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")

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

这是一个博客和阅读更多。。。

例如:

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

最新更新