Springboot中从MultipartFile文件流中获取csv文件,将其初始化为实体类集合(包含@Valid在方法中拦截和验证的手法) 草稿

/*
 * 从MultipartFile文件流中获取csv文件,将其初始化为实体类集合
 *
 * @Author: wuyc
 * @Date: 2022/3/15 20:19
 * @Param [file, clazz] [文件对象,实体类类型]
 * @return java.util.List<T>c
 */
public static <T> List<T> readCsv(MultipartFile file, Class<T> clazz) throws Exception {
   InputStreamReader in = new InputStreamReader(file.getInputStream(), "GBK");
   HeaderColumnNameMappingStrategy<T> mappingStrategy = new HeaderColumnNameMappingStrategy<>();
   mappingStrategy.setType(clazz);
    
   CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(in)
            .withSeparator(',')
            .withQuoteChar('\'')
            //.withSkipLines(1)
            .withMappingStrategy(mappingStrategy)
            .build();
    
   // 如果导出来的数据不符合要求,直接终止处理 
   // 注意此处采用了@Valid来验证,过CsvToBean对象的parse()方法将CSV文件解析成实体类对象列表,
   // 并使用@Valid注解对结果进行验证。
   // 在这里,@Valid注解的作用是告诉程序验证该tList列表中的每个元素是否符合对应实体类的校验规则。
   // 如果某个实体类对象不符合校验规则,则会抛出验证异常。
   @Valid List<T>tList=csvToBean.parse();

   return tList;
}

/*
 * 根据文件路径和实体类类型读取CSV文件并转换为实体类列表
 *
 * Author: wuyc
 * Date: 2022/3/16 11:18 
 * 返回一个唯一的文件名
 */
public static synchronized String getUniqueKey(){
   Random random = new Random();
   
   /*生成一个三位随机数*/
   Integer num=random.nextInt(900)+100;
   return String.valueOf(num);
}

扫描二维码,在手机上阅读!

发表评论

电子邮件地址不会被公开。 必填项已用*标注