如何将嵌套的表单值映射到SpringMVC中的HashMap

时间:2016-03-16 06:46:53

标签: java spring spring-mvc

来自Python / Ruby背景的萌芽Java / Spring开发人员试图了解如何在围栏的另一端完成工作。 :)

我制作了一个HTML页面,如下所示:

<input type="checkbox" name="todos[1][checked]" checked>
<input type="text" name="todos[1][description]" value="Walk cat"><br>
<input type="checkbox" name="todos[2][checked]">
<input type="text" name="todos[2][description]" value="Feed houseplant">

当它进入我的控制器方法时,我希望它是一个看起来像这样的哈希(用JSON格式表示):

{
  "todos": {
    "1": {
        "description": "Walk cat",
        "checked": "on"
    }, 
    "2": {
        "description": "Feed houseplant"
    }
}

我想象的是以下内容:

@RequestMapping(path = "/updateMany", method = RequestMethod.POST)
public String todoUpdateMultiple(@RequestParam HashMap<String, String> todos) {  // Also tried with HashMap<String, HashMap<String, String>> but no major difference in behavior
   // … implementation details …
}

但是我得到的格式如下:

{
   "todos[1][description]": "Walk cat",
   "todos[1][checked]": "on",
   "todos[2][description]": "Feed houseplant"
}

我们最终找到了一个解决方案,我们创建了一个新的类TodoMultiUpdateViewModel,用于存储ArrayList<Todo>个项目,这些项目在我们的方法中最终成为:

@RequestMapping(path = "/updateMany", method = RequestMethod.POST)
public String todoUpdateMultiple(@ModelAttribute TodoMultiUpdateViewModel todos) {
   // … implementation details …
}

虽然这种方法有效,并且效果很好,但为了处理这种简单的一次性形式交互,创建一个额外的类似乎很荒谬。

0 个答案:

没有答案