我有一个使用java脚本动态创建的复杂html表单。
我希望将键值对的映射作为Map中的Map并存储它们。
这是我的控制器来获取提交的数据。
@RequestMapping(value="/create", method=RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createRole(Hashmap<String, Object) keyVals) {
....
}
但我的地图是空的。
如何在Spring mvc控制器中将表单数据作为名称 - 值对的映射获取?
答案 0 :(得分:26)
您还可以将 @RequestBody
与 MultiValueMap
一起使用
e.g。
@RequestMapping(value="/create",
method=RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createRole(@RequestBody MultiValueMap<String, String> formData){
// your code goes here
}
现在您可以获取参数名称及其值。
MultiValueMap 在Spring utils包中
答案 1 :(得分:5)
我刚刚找到了解决方案
@RequestMapping(value="/create", method=RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createRole(HttpServletRequest request) {
Map<String, String[]> parameterMap = request.getParameterMap();
...
}
这样我就有了提交参数的地图。
答案 2 :(得分:1)
以上答案已经正确指出@RequestParam批注缺失。只是为了添加为什么需要这个,
一个简单的GET请求就像这样:
http://localhost:8080/api/foos?id=abc
在控制器中,我们需要将函数参数映射到GET请求中的参数。所以我们将控制器写为
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
return "ID: " + id;
}
并添加@RequestParam来映射参数“ id”。
答案 3 :(得分:0)
尝试一下
@RequestMapping(value = "/create", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String createRole(@RequestParam HashMap<String, String> formData) {