Spring MVC将http params形式化为对象映射成员变量的模型

Stu*_*art 1 java spring freemarker spring-mvc

我努力为这个问题命名.我试图解决的问题与此处描述的问题非常相似,但我没有提交bean的列表,而是提交表示模型对象中的地图的http请求参数,让框架(Spring)负责构建地图来自http请求参数.有人可以建议最好的做法/最干净的方法吗?任何帮助将非常感激.

目前我传递两个String数组,然后在保存到模型对象之前将它们转换为映射.我认为必须有一个更好的方法来做到这一点.

我使用Spring MVC和Freemarker进行视图渲染.

说明代码:

模型对象:

public class Foo {
    private Map<String, String> barMap;
    // other member variables...
}
Run Code Online (Sandbox Code Playgroud)

查看fremarker模板:

<#list foo.barMap?keys as currKey>
    <tr id="barList_${currKey_index}">
        <td><input name="key" type="text" value="${currKey}"/></td>
        <td><input name="value" type="text" value="${foo.barMap[currKey]}"/></td>
    </tr>
</#list>
Run Code Online (Sandbox Code Playgroud)

控制器:

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String foo (Model model,
                   @RequestParam(value="key", required=false) String[] keys, 
                   @RequestParam(value="value", required=false) String[] values) {

    Foo foo = new Foo();
    Map<String, String> barMap = new HashMap<String, String>();

    if (keys != null && values != null && keys.length == values.length) {
        for (int i = 0; i < keys.length; i++) {
            if (keys[i] != null 
                && !keys[i].isEmpty() 
                && values[i] != null 
                && !values[i].isEmpty()) {

                barMap.put(keys[i], values[i]);
            }
        }
    }

    foo.setBarMap(map);

    return WebConstants.VIEW_FOO;
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*G C 5

直接使用map来绑定

@RequestMapping(value = "/foo", method = RequestMethod.POST)
public String foo (@RequestParam Map<String,String> allRequestParams ,Model model){
}
Run Code Online (Sandbox Code Playgroud)

并在Foo中放置getter和setter以获取地图.

然后地图会自动填充