美文网首页
java CSV文件登录数据(返回错误数据)

java CSV文件登录数据(返回错误数据)

作者: 猫的树 | 来源:发表于2021-05-30 09:06 被阅读0次

    页面上传一个csv文件,check文件内容,如果不满足要求,则返回错误信息,反之则登录数据。(仅供参考)

    1.导入依赖(opencsv.jar)
    2.创建工具类

    UserErrorInfo.java(存放错误信息)

    public class UserErrorInfo {
        /**
         * 行番号
         */
         private int rowIndex;
         
        /**
         * 用户ID
         */
        private String userId;
        
        /**
         * 用户名
         */
        private String userName;
        
        /**
         * 错误信息
         */
        private List<String> errMsgs;
        ...
        getter() setter()...
    }
    

    CsvUesrRegisInfo.java(数据check)
    validation check(可以自定义标签)

    public class CsvUesrRegisInfo{
        /**
         * 用户ID
         */
         @NotEmpty()
        private String userId;
        
        /**
         * 用户名
         */
         @NotEmpty()
        private String userName;
        ...
        getter() setter()...
    }
    

    CsvUploadOutputDto.java

    public class CsvUploadOutputDto{
        /**
         * 用户信息
         */
        private List<?> dataList;
        
        /**
         * check结果
         */
        private BindingResult bindingResult ;
        
        /**
         * check结果
         */
        private List<UserErrorInfo> UserErrorInfoList;
        ...
        getter() setter()...
    }
    

    CsvUploadHelper.java
    (核心处理)

    public class CsvUploadHelper{
        public <T> CsvUploadOutputDto uploadFile(MultipartFile uploadFile, Class<T> csvBeanClass, String bindingResultObjectName){
            CsvUploadOutputDto outputDto = new CsvUploadOutputDto();
            BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(uploadFile, bindingResultObjectName);
            // CSV非空check()
            if (uploadFile.isEmpty()) {
                ...// throw new BusinessException(messages);
            }
            List<T> dataList = new ArrayList<>();
            List<ObjectError> errorList = new ArrayList<>();
            List<UserErrorInfo > UserErrorInfos = new ArrayList<>();
            boolean overSizeFlag = false;
            try {
                //读取csv文件
                CSVReader csvReader = new CSVReader(new InputStreamReader(uploadFile.getInputStream(),"MS932"));
                List<String[]> csvLines = csvReader.readAll();
                int lineNumber = 0;
                // 最大行数
                if (maxRecord < csvLines.size()) {
                    overSizeFlag = true;
                } else {
                    for (String[] line : csvLines) {
                        lineNumber = lineNumber + 1;
                        Class<?> clazz = Class.forName(csvBeanClass.getName);
                        T csvObject = (T) clazz.newInstance;
                        Field fields = csvObject.getClass.getDeclaredFields();
                        BeanPropertyBindingResult result= new BeanPropertyBindingResult(csvObject, csvBeanClass.getName());
                        // check
                        smartValidator.validate(csvObject, result);
                        boolean hasErrorFlag = false;
                        //
                        if (result.hasErrors){
                            hasErrorFlag = true;
                            /**
                             * errMsgList.add(message)
                             * userErrorInfo.setErrMsgs(errMsgList);
                             * userErrorInfos.add(userErrorInfo);
                             */
                        }
                        if (hasErrorFlag ) {
                            errorList.add(objectError)
                        } else {
                            // check通过
                            dataList.add(csvObject);
                        }
                    }
                }
                csvReader.close();
            }catch(...){
                ...
            }catch(...){
                ...
            }
            outputDto.setUserErrorInfoList(userErrorInfos);
            outputDto.setDataList(dataList);
            for(objectError error : errorList){
                bindingResult.addError(error);
            }
            outputDto.setBindingResult (bindingResult);
            retrun outputDto;
        }
    }
    

    3.调用工具类
    controller

    outputDto = csvUploadHelper.uploadFile(uploadFile,CsvUesrRegisInfo.class,result.getObjctName());
    if (outputDto.getBindingResult().hasError()) {
        //返回错误数据,返回页面
    } else{
        //登录数据
    }
    

    总结

    写这个主要目的是记录,还有很多没在这个上面写出来,但总体就是基本的csv读取和Java反射原理。

    相关文章

      网友评论

          本文标题:java CSV文件登录数据(返回错误数据)

          本文链接:https://www.haomeiwen.com/subject/iztdsltx.html