我有处理表单提交的控制器方法:
@RequestMapping(method = {RequestMethod.POST})
public String submitForm(...){...}
但是,我有一个新的测试用例:
如果Form具有参数ProductData
,则调用控制器方法submitFormWithProductData
。我在这方面面临困难,因为ProductData
是Map
。表单标签中的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
}