Spring MVC的:@RequestMapping:如何捕捉地图参数?(Spring MVC:

2019-11-03 17:28发布

我有处理形式提交控制器方法:

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

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

如果表具有参数ProductData呼叫控制器方法submitFormWithProductData 。 而我面对这种困难,因为ProductData是一个Map 。 现场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[]")

但我没有成功。

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


Answer 2:

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

这里是一个博客和更多...

例如:

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


文章来源: Spring MVC: @RequestMapping: How to catch Map parameter?