笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)

笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)

PS:解决方法在最后。

因为帮别人做一个导出,跟我说查询已经做好,正常按着查询写个导出,那不是简简单单的事情,但是,问题出现了,写完导出之后,发现居然报错了!报错如下:

字典键值转换居然报错了!反复看导出类配置,但是完全看不出有什么问题,心态逐渐爆炸,无奈,debug看看源码吧。

java 复制代码
    @ExcelProperty(value = "发货状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "send_status")
    private String orderSendStatus;

首先从doWrite开始:

点开excelWriter->excelBuilder->context->clazz->reflectionData->referent->declaredFields,可以看到此时的class还是正常的。

一直往下:




到这时都是正常的,直到addJavaObjectToExcel方法,问题出现了:

打开excelContentProperty这个对象的属性,可以看到注解属性不见了!见鬼了!

如果眼神好的话,想必已经发现问题了,可惜我眼神不好, 来来回回看了几遍才发现问题,两次clazz类的id不一样了,前面是9136,后面是9135,但是正常不会这样,因为同一个java对象传参是不会变的。再仔细看看,发现这里面的对象是实体类,而不是导出类!

但是我记得明明查询用的是导出类,怎么会变成实体类。

但是再次debug看数据实际上确实是实体类:

再往下找,发现问题所在:

原来是查询的时候使用的映射是实体类,所以导致读取不到@ExcelDictFormat,因为压根就不是导出类,怎么能读取到注解。。。

解决方法也很简单:
1、把xml映射map路径从实体类改为导出类
2、或者把resultMap直接改成resultType,值为导出类路径
1和2选一个改,只要正常返回导出类对象,问题就解决了

相关推荐
摇滚侠2 分钟前
《SpringBoot 3:入门与应用实战》第 6 章 Spring Boot 最佳实践 阅读笔记 12
android·spring boot·笔记
码匠许师傅8 分钟前
【C++ 面试真题】聊聊 C++ 的类型特征( type_traits)
java·c++·面试
java1234_小锋10 分钟前
Spring框架的创始人开发了一个Java AI智能体框架
java·人工智能·spring
金立基包装胶水11 分钟前
格拉辛纸热封后容易开胶怎么办?
大数据·笔记·其他
夏天拐跑了西瓜12 分钟前
Eureka注册中心——单机与高可用集群搭建
java·spring cloud·微服务·eureka
Caster_Z14 分钟前
IntelliJ IDEA 安装 Qoder CN (Formerly Lingma)
java·ide·intellij-idea
前端炒粉21 分钟前
fetch+readablestream(Streamable)流式输出
java·服务器·前端
珍珠先生29 分钟前
第18章 泛型入门
java
我命由我1234529 分钟前
人脸识别 - 判断人脸是否在画面中央
java·人工智能·python·java-ee·人脸识别·android jetpack·android runtime
程序猿乐锅30 分钟前
从 dsh 源码看「一切皆插件」与 Spring IoC
java·网络·数据库·人工智能·后端·spring