解决方案1.修改属性名字,让第二个字母小写,或者说是规定所有的属性的前两个字母必须小写2.如果数据库已经设计好,并且前后端接口对接好了,不想修改,那就专门为这种特殊的属性使用idea生成get-set方法@Accessor(chain = true)注解的问题问题发现在使用easyExcel(github.com/alibaba/eas…) 导出的时候,发现以前的实体类导出都很正常,但是现在新加的实体类不正常了,比对了发现,新加的实体类增加了@Accessor(chain = true)注解,我们的目的主要是方便我们链式调用set方法:
new UserDto().setUserName("").setAge(10).........setBirthday(new Date());原因easyexcel底层使用的是cglib来做反射工具包的:
com.alibaba.excel.read.listener.ModelBuildEventListener 类的第130行BeanMap.create(resultModel).putAll(map);最底层的是cglib的BeanMap的这个方法调用abstract public Object put(Object bean, Object key, Object value);复制代码但是cglib使用的是Java的rt.jar里面的一个Introspector这个类的方法:
# Introspector.java 第520行if (int.class.equals(argTypes[0]) && name.startsWith(GET_PREFIX)) {pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, method, null);//下面这行判断,只获取返回值是void类型的setxxxx方法 } else if (void.class.equals(resultType) && name.startsWith(SET_PREFIX)) {// Simple setterpd = new PropertyDescriptor(this.beanClass, name.substring(3), null, method);if (throwsException(method, PropertyVetoException.class)) {pd.setConstrained(true);}}解决方案1.去掉Accessor注解2.要么就等待easyexcel的作者替换掉底层的cglib或者是其他,反正是支持获取返回值不是void的setxxx方法就行
作者:liuxuzxx
链接:https://juejin.im/post/6881432532332576781
推荐阅读
- 为什么 TCP 协议有粘包问题
- 安琪拉时之奇旅为什么不能赠送?
- 一只马尔济斯犬多少钱 马尔济斯犬为什么那么少人养
- 白茶为什么要妥善存放,若何存放白茶
- 兔子突然咬主人是为什么 兔子急眼还咬人
- 兰花为什么要换盆 兰花长时间不服盆
- 为什么做俯卧撑手臂酸痛?
- 小兔子为什么会戴上眼镜呢 小兔不听劝告最后戴眼镜了看图写话
- 纠结要不要养猫 为什么说养猫不好
- 养猫和仓鼠 猫为什么喜欢仓鼠
