数组参数封装到Record对象

    public List<Record> getRecordlList(String fieldName) {
        Pattern p = Pattern.compile(fieldName + "\\[\\d+\\].[a-zA-z0-9]+");
        Map<String, String[]> parasMap = getRequest().getParameterMap();
        String paraKey;
        
        Map<String, Map<String, Object>> parasMap2=new HashMap<String, Map<String,Object>>();
        for (Entry<String, String[]> e : parasMap.entrySet()) {
            paraKey = e.getKey();
            Matcher m = p.matcher(paraKey);
            if (m.find()) {
                String key = paraKey.substring(paraKey.indexOf("[")+1, paraKey.indexOf("]",paraKey.indexOf("[") ));
                if(parasMap2.containsKey(key)){
                    Map<String, Object> tmp = parasMap2.get(key);
                    if(StrKit.notBlank(e.getValue()[0])){
                        tmp.put(paraKey.split("\\.")[1], e.getValue()[0]);
                        parasMap2.replace(key, tmp);
                    }
                }else{
                    Map<String, Object> tmp=new HashMap<String, Object>();
                    if(StrKit.notBlank(e.getValue()[0])){
                        tmp.put(paraKey.split("\\.")[1], e.getValue()[0]);
                        parasMap2.put(key, tmp);
                    }
                    
                }
            }
        }
        Iterator<Entry<String, Map<String, Object>>> its = parasMap2.entrySet().iterator();
        List<Record> resultList = new ArrayList<Record>();
        while(its.hasNext()){
            resultList.add(new Record().setColumns(its.next().getValue()));
        }
        return resultList;
    }

简单粗暴写出来的~欢迎拍砖!

评论区

JFinal

2020-11-17 20:05

为什么要用正则匹配呢?

sioui

2020-11-19 10:11

魔鬼嵌套,有必要这么封装吗,使用场景在哪

车仔2020

2020-11-19 20:02

@sioui 有个业务场景是:一个事件要创建当前事件业务表,表字段名根据字段数量递增生成的,有规则但不可预知,所以就产生了我这个需求。

sioui

2020-11-20 10:26

@车仔2020 建议将这些不可预知的数据通过转成json的形式保存即可,就像nosql文档存储

sioui

2020-11-20 10:28

@sioui 可以建个表用来配置每个业务的参数值以及对应的数据类型,方便校验。

车仔2020

2020-11-22 21:48

@sioui 对的,专门有一个装配置的表。