首页 > 其他分享 >关于easyExcel解析未添加@ExcelProperty报错问题分析

关于easyExcel解析未添加@ExcelProperty报错问题分析

时间:2024-07-10 15:42:13浏览次数:7  
标签:转换 easyExcel ExcelProperty 导出 报错 解析 加载

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

 

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

这里新加了两个字段用于做转换使用。因为之前很少用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解析了我不想让他解析的字段。这篇文章也只针对碰到的问题做解析,不做其他的框架解析。
 

 

标签:转换,easyExcel,ExcelProperty,导出,报错,解析,加载
From: https://www.cnblogs.com/luxj/p/18294189

相关文章

  • .Net Core WebApi项目 Development模式下报错 System.InvalidOperationException 解决
    .NetCoreWebApi项目Development模式下报错System.InvalidOperationException:“Cannotresolvescopedservice'Microsoft.Extensions.Options.IOptionsSnapshot`1[Infrastructure.OptionsSetting]'fromrootprovider.” 但是在Production模式下,运行正常因为未设置的......
  • Lbview调用python脚本报错:错误1667...无法导入指定的python模块
    前提注意:NILabVIEW2021(32位)Python3.9.10(32位)32位对应32位,64位同理,否则可能会报错报错的原因:LabVIEW中使用的Python环境与安装的Python包不匹配也就是说Labview中使用的是python版本安装的系统路径,而PyCharm使用的虚拟环境路径,它的包都是下载到项目文件夹内可......
  • MySQL导入数据库报错#1118 - Row size too large ( 8126). 的解决方法
    导入SQL文件时报错(在执行创建表或者增加字段时,发现rowsize长度过长,会导致出现以下错误)[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSEDmayhelp.Incurrentrowformat,BLOBprefix......
  • 【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
    问题描述应用部署在AzureAppService中,访问DefaultURL,遇见SSL:WRONG_VERSION_NUMBER错误。RESTAPI工具调用时错误信息:writeEPROTO8936192:error:100000f7:SSLroutines:OPENSSL_internal:WRONG_VERSION_NUMBER:..\..\third_party\boringssl\src\ssl\tls_record.cc:231:......
  • 创建vue2项目执行npm install -g @vue/cli报错 no such file or directory, mkdir '\
    第一步:查看默认全局安装路径。指令:npmconfiggetprefix我这里路径npmconfiggetprefixE:\NVM\nvm\node_global第二步:不存在这个路劲进行更换npmconfigsetprefix"D:\Develop\nodejs"nodejs里面有node_cachenode_globalnode_modules这些文件npmconfiggetpre......
  • 服务器数据库OAERP报错
    一、常见原因网络问题:网络延迟、网络阻塞或网络故障都可能导致数据库连接不稳定或中断。防火墙或路由器的设置不当也可能阻止ERP系统与数据库之间的正常通信。数据库配置问题:数据库服务器的IP地址、端口号、用户名和密码等配置信息错误或不一致。数据库服务器的配置参数设置......
  • IIS部署后运行报错:“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporar
    IIS报错当前标识(IISAPPPOOL.NETv4.5)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\TemporaryASP.NETFiles”的写访问权限。解决方法:1、以管理员权限运行PowerShell2、输入以下指令:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet_regiis.exe-ga'......
  • springboot(maven,本地jar包,打包报错)
    maven,本地jar包,打包报错情况:部署一个springboot+vue的项目(若依)项目中用到了一个"本地的第三方jar包"//为什么使用本地jar,因为我们使用的阿里云的maven没有这个jar包,只能使用本地自己的问题来了,打包时候报错:而且他用的是:本地路径导入:本地jar//(这个不影响本地运行,但是影......
  • Adobe acrobat打开pdf报错“Something went wrong Arunning instance of Acrobat has
    ArunninginstanceofAcrobathascausedanerrorInAcrobat,tryingtouseatoolorfeatureresultsinthefollowingerror:"ArunninginstanceofAcrobathascausedanerror." Reason:Theerroroccurswhenanalready......
  • This function or variable may be unsafe. Consider using scanf_s instead报错-快速
    文章目录问题描述:问题解决:1、安装软件2、更改newc++file.cpp文件3、新建项目验证问题描述:vs2019运行含有scanf函数的代码时,实例代码如下:会出现如下图所示报错:#问题剖析:首先说结论,因为scanf是标准C提供的函数,但是vs2019无法识别导致报错,从报错的的代码可以......