关于修改前端请求原生request加锁问题

发布时间 2023-04-06 15:24:52作者: 唯恐不及

1

正常情况后端获取前端的request请求:(原生已加锁,修改失效 校验)

Map<String, String[]> parameterMap = req.getParameterMap();

......

报错:错误:java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap
at org.apache.catalina.util.ParameterMap.remove(ParameterMap.java)

       
解决办法:重新在堆里创建新的对象
 Map<String,String[]> parameterMap = new HashMap<>(req.getParameterMap());

        String[] superQueryArr = parameterMap.get("superQueryParams");

        String[] newSuperQueryArr = new String[superQueryArr.length];

        int arrSize = superQueryArr.length;

        if(arrSize>0) {

            int index = 0;

            for (String s : superQueryArr) {
                //专门对日期类型高级查询比较进行设置(eg:审核日期大于查询日期,实际获取的应该是查询日期之前的数据)
                if ((s.contains("date") || s.contains("datetime"))) {
                    if (s.contains("gt")) {
                        s.replace("gt", "lt");
                    } else if (s.contains("lt")) {
                        s.replace("lt", "gt");
                    } else if (s.contains("ge")) {
                        s.replace("ge", "le");
                    } else if (s.contains("le")) {
                        s.replace("le", "ge");
                    }
                }
                newSuperQueryArr[index++] = s;
            }
        }
            parameterMap.put("superQueryParams",newSuperQueryArr);