JavaExcel 导入各种非法校验遇到的巨坑!!!

43 阅读3分钟

就随手记录一下本次迭代遇到的问题

1.背景

本次是个紧急需求,就是个简单的Excel导入功能,时间紧急,从接到需求到上线,3天时间,包含需求了解,项目了解,开发代码,联调,以及修复bug等

[问题简述:excel导入会输入各种异常数据,字符,字符,符号,校验繁琐,输入的和存入库的字段也不同,写的很痛苦]

[问题简述:各种非法输入校验]

环境/上下文:测试环境

操作系统/平台:windows11

编程语言/框架/库及版本:Java/Spring Cloud/Nacos

项目/模块:只是一个单独的简单导入功能

错误信息/现象:** (非法输入各种异常抛出,捕获异常不全面,调用其他系统返回也未校验完全等。例如:

1.外部接口调用,只校验Data为空,没校验List为空;

2.如上限/下限字段数据库为int类型,需求描述的非常简单,比如下限大于等于0,上限为如果写字符‘不限制’,数据库可以是null,月份字段前台输入如2022-03,数据库存储不要杠等

3.Excel接收字段类型定义被需求描述误导,想的太简单,导致后续各种非法校验测试不通过,这真的是巨坑!

4.出现超预期的工作项,不完成就无法继续进行流程等。比如前端从低代码平台迁移成web项目,需要配置很多东西,网关的配置转发,nacos配置,模板上传接口,下载接口,权限控制,全部都是新的

5.未加分布式锁,会导致并发导入数据,造成数据不一致、业务异常数据错误、重复处理等

排查过程: (简要记录你尝试过的步骤、思路、参考的文档/链接)

1.review代码时给了优化建议以及参考方式

2.充分自测非法输入场景,前面因为字段类型限制如Integer类型无法接收小数输入,会自动截取小数点

3.测试帮助一起走各种异常场景

根本原因: (深入分析问题本质,避免停留在表面)

1.数据类型受到数据库字段类型定义、以及需求文档干扰,定义数据类型引起很多不必要的问题,严重浪费时间。

2.预留时间处理异常情况,不能阻塞流程,没有时间充分测试。

* 解决方案: (清晰、分步说明最终有效的解决方法,包含必要的代码、命令、配置变更)

   1.在接收数据时,全都改用String类型接收,Excel导入时会有很多异常场景,不受控制,前端也无法干预,这种场景就要在Excel接收字段时就包容性高一些,加强校验,在转换字段类型错误时捕捉异常,这样也可以在错误信息展示。

   2.一开始就加锁并try-catch,Redisson#getLock方法,固定前缀加上请求数据,获取分布式锁。尝试加锁执行,成功释放锁,否则就返回错误信息

   3.hutool 工具校验时间等,可看一下文档是否有满足自己的时间格式校验

   3.最开始多思考,写出大概思路以及会遇到的问题,再进行代码编写,太着急易容返工,浪费更多时间处理

标签/关键词:** #错误类型 #技术栈 #组件 #环境 ( #Redisson #批量导入 #Java #性能优化)