惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
腾讯CDC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
F
Full Disclosure
博客园 - 【当耐特】
C
CERT Recently Published Vulnerability Notes
Engineering at Meta
Engineering at Meta
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threatpost
I
Intezer
V2EX - 技术
V2EX - 技术
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
小众软件
小众软件
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
N
News | PayPal Newsroom
MyScale Blog
MyScale Blog
AI
AI
Vercel News
Vercel News
Spread Privacy
Spread Privacy
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
Schneier on Security
Schneier on Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
U
Unit 42
L
LangChain Blog
Recent Announcements
Recent Announcements

博客园 - 一叶知秋。

从包含时间属性的对象列表中,筛选出时间≤指定时间参数且最接近该时间参数的那个对象 安装nginx和OpenSSL struts2的<s:if test>标签的注意点 mysql怎么写逻辑比较清晰? 设置idea 代码报错时不弹框显示 Collections.sort多个字段排序 LigerUI 中的 Grid (ligerGrid) 合并单元格 mysql模糊查找数据库使用的字段名 spring RestTemplate忽略证书验证 Nginx的常用命令(启动重启停止等) 解决远程调用三方接口:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException报错 msyql查询表的索引sql语句 MySQL查看表占用空间大小 js屏蔽回车提交 kettle同步表数据null处理 MySql 分组后获取距离时间最近的第一条数据 mysql解表和查看锁表 Windows关闭指定端口命令 Windows 技术篇-防火墙启用时指定外部可访问端口,防火墙开放端口设置
关于easyExcel解析未添加@ExcelProperty报错问题分析
一叶知秋。 · 2024-07-10 · via 博客园 - 一叶知秋。

在一次做辅料商品导出列表的需求,并且上线之后发现,怎么商品列表的导出没有反应,一看日志,发现报错了:

原因:在做需求时,辅料商品导出用的时商品导出的接口,并且做了参数的转换。

这里新加了两个字段用于做转换使用。因为之前很少用easyExcel,所以以为只要不加@ExcelProperty,easyExcel就不会去解析字段,没想到easyExcel还是去做了解析。

源码分析

通过上面的源码可以看到。

contentPropertyMap.entrySet() 需要解析成excel的字段

beanMap 当前行的数据(就是要导出的list中的一条,这里的解析是一条条解析转换)

这里可以看到contentPropertyMap.entrySet() 里面竟然包含了我没有加上@ExcelProperty注解的isBind1688这个字段。所以我们接着追踪一下,为什么会加载到这个字段,以及什么时候才会去加载。

什么时候才会去加载:
通过调用发现,每次调用easyExcel时,第一次会通过反射去获取需要加载的字段,后面每次进入调用链都只是通过访问缓存回去的。可以通过getFieldCache()方法可知。

为什么会加载到这个字段:
通过如下这行代码。我们发现,在我们去调用的时候,其实早就已经加载了。

Map<Integer, ExcelContentProperty> contentPropertyMap =

writeContext.currentWriteHolder().excelWriteHeadProperty().getContentPropertyMap();

excel要导出的头早就已经在内存中存在。所以接着找一下源头。

上面是easyExcel的调用链。接下来就是重头戏:declaredOneField()

 

如上图:可以知道逻辑:

1、如果加上了@ExcelIgnore注解,就会加入到ignoreMap中,然后不会做转换。

2、如果class上加上了@ExcelIgnoreUnannotated、或者convertAllFiled=false并且field上没有加@ExcelProperty就会加入到ignoreMap中,然后不会做转换。

3、如果是static字段、final字段、transient(序列化忽略)字段,就会加入到ignoreMap中,然后不会做转换。

结论

1、如果不想让easyExcel转换我们不要的字段,我们可以在class上加上@ExcelIgnoreUnannotated注解,并且字段上不加@ExcelProperty注解。

2、可以加上@ExcelIgnore注解,就不会取转换解析。

3、可以加上transient,也可以不解析。

如上,这次碰到的是easyExcel解析了我不想让他解析的字段。这篇文章也只针对碰到的问题做解析,不做其他的框架解析。