问题
当多个相同name的form表单请求参数发送至后端,@RequestParam Map params 只能接收位于第一个的input标签值
params = {LinkedHashMap@7175} size = 1
0 = {LinkedHashMap$Entry@7184} "id" -> "3"
key = "id"
value = "3"
解决方法
通过 request.getParameterValues() 验证参数是否含多个值,并对 params 进行处理
Java代码
@RequestMapping("index")
public void index(@RequestParam Map params,HttpServletRequest request){
paramsHandler(params, request);
......
}
private void paramsHandler(Map params, HttpServletRequest request) {
Set<String> set = params.keySet();
for (String x : set) {
String value = request.getParameter(x);
String[] values = request.getParameterValues(x);
//处理多个相同name的参数
if (values != null) {
List<String> list = new ArrayList<>();
for (String y : values)
list.add(y);
params.put(x, list);
}else if(x.matches("^.+\\[[0-9]+\\]\\[.+\\]$")){
Map dataLine=new HashMap();
}
}
}
结果
params = {LinkedHashMap@7175} size = 1
0 = {LinkedHashMap$Entry@7184} "id" -> " size = 3"
key = "id"
value = {ArrayList@7190} size = 3
0 = "3"
1 = "2"
2 = "1"