java csv导入 t_【java后端】解析csv文件并转成bean对象

为了批量导入数据,采用了csv文件存储数据,后端写csv解析工具对数据进行读取和解析并导入数据库。

1、解析csv文件工具类(通用) public class CsvUtil { /** * 日志对象 */ private static final Logger LOGGER = LoggerFactory.getLogger(CsvUtil.class); /** * 解析csv文件并转成bean * @param file csv文件 * @param clazz 类 * @param 泛型 * @return 泛型bean集合 */ public List getCsvData(MultipartFile file, Class clazz) { InputStreamReader in; try { in = new InputStreamReader(file.getInputStream(), "gbk"); } catch (Exception e) { LOGGER.error(Constant.LOG_FOMAT_TYPE_TWO, ViasErrorCode.FILE_LOAD_ERROR.getErrorCode(), ViasErrorCode.FILE_LOAD_ERROR.getMessage(), e.getMessage()); throw BaseException.of(ViasErrorCode.FILE_LOAD_ERROR.of()); } HeaderColumnNameMappingStrategy strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(clazz); CsvToBean csvToBean = new CsvToBeanBuilder(in) .withSeparator(',') .withQuoteChar('\'') .withMappingStrategy(strategy).build(); return csvToBean.parse(); } }

2、csv文件

fca08c27e940b334981fc855c65e012a.png

3、csv文件对应的bean对象DataAndTypeCsv.java public class DataAndTypeCsv { /** * 字典代码 */ @CsvBindByName(column = "code") private String code; /** * 简写 */ @CsvBindByName(column = "short_name") private String shortName; /** * 名称 */ @CsvBindByName(column = "name", required = true) //是否可以为null 否 private String name; /** * 拼音或英文描述 */ @CsvBindByName(column = "remark") private String remark; /** * 父类型id */ @CsvBindByName(column = "parent_id") private Integer parentId; /** * 类型名称 */ @CsvBindByName(column = "type_name", required = true) //是否可以为null 否 private String typeName; /** * 类型id */ @CsvBindByName(column = "type_id", required = true) //是否可以为null 否 private Integer typeId; …… get、set方法 ……

bean对象通过注解@CsvBindByName(column = “”, required = true) 映射csv文件的列名,并检查列数据是否为空,若是csv文件中该列存在值为空的情况会报错。

4、应用

controller层定义restful接口: @Transactional(rollbackFor = BaseException.class) @PostMapping public Map batchInsert(MultipartFile file) { CsvUtil csvUtil = new CsvUtil(); // 将csv文件内容转成bean List csvData = csvUtil.getCsvData(file, DataAndTypeCsv.class); …… }

postman调用接口测试:

c74f634526141cd0547c3adfd9fabfb4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值