【问题标题】:Spring MVC: @RequestMapping: How to catch Map parameter?Spring MVC:@RequestMapping:如何捕获 Map 参数?
【发布时间】:2015-04-01 10:01:49
【问题描述】:

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

@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[]")

但我没有成功。

【问题讨论】:

  • 您能否解释一下为什么要这样做(以不同的方式处理请求)?也许还有另一种方法可以满足您的要求
  • 当然,我可以解释:目前,我有开箱即用的控制器方法 submitForm;然后,我在现有的 html 表单中添加了新功能(productData Map),我需要处理这些数据。我无法修改oob代码,所以我刚刚创建了新方法submitFormWithProductData,但是如何调用它......

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


【解决方案1】:

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

【讨论】:

  • 你有:FormModel 类和 submitForm(FormModel) 处理程序——它们是开箱即用的,这意味着你不能修改它们,好吗?您可以添加 FormWithProductDataModel 扩展 FormModel,同意吗?并添加 FormWithProductDataModel 属性 Map productData,同意吗?那么你需要在服务器端处理这个表单,你不能修改默认处理程序,所以,你将添加新方法 submitFormWithProductData(FormWithProductDataModel form),是吗?您将为新处理程序使用哪些 @RequestMapping 参数?
【解决方案2】:

使用@RequestBody Map&lt;String,String&gt; productData 作为控制器方法的参数。

这是BlogRead more...

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2014-04-19
    • 2020-11-11
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多