Java 解决@RequestParam不能接收form表单多个相同name的参数问题

问题

当多个相同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"

猜你喜欢

转载自blog.csdn.net/qq_44460210/article/details/90209312