来自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 …
}
虽然这种方法有效,并且效果很好,但为了处理这种简单的一次性形式交互,创建一个额外的类似乎很荒谬。