前言:
最近,利用业余时间在整理一套“Excel导入导出+多线程处理导入数据+多线程事务回滚”的模板方法,遇到Json字符串反Json成Map后,Map顺序乱了的问题,这个问题影响到Excel导出错误数据表头乱序,我一开始没有找到最合适方法,使用了一个笨方法,后来又搜索了好久才找到最简单解决方法。
先导知识:
HashMap、LinkedHashMap和TreeMap的区别?
HashMap无序,如果用它存储数据,不能保证数据顺序;
LinkedHashMap有序,内部维护一个链表,按照插入顺序排序;
TreeMap有序,内部维护一个Comparable比较器,按照比较器定义的规则内部排序。
问题演示:
0.整理流程:
1.下图定义的Map为导出错误数据的表头数据,为了防止顺序混乱使用了LinkedHashMap:
2.initAttrToTitle()的作用是初始化导出错误Excel表头的数据,把它在封装的一个Map中,HTTP响应给前端:
3.前端接收错误数据后,会序列化成Json字符串调用后端导出方法:
4.后端的导出错误Excel方法:
5.Debug看数据title,发现类似是无序:
解决方法:
1.笨方法:
自己定义一个Entity实体来接收反Json字符串的数据,title使用LinkedHsahMap集合
2. fastjson中Feature.OrderedField属性:
在jsonToMapSO工具方法中,添加Feature.OrderedField,它的作用是禁止排序。
debug看一下效果: