如何在Spring MVC控制器中将Form数据作为Map获取?

时间:2014-07-03 10:59:46

标签: java spring spring-mvc

我有一个使用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控制器中将表单数据作为名称 - 值对的映射获取?

4 个答案:

答案 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) {