本文主要是介绍解决SpringBoot在使用AOP切片时DATE类型出现Argument is not assignable to ‘lombok.Data‘ 的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
场景:在使用aop切片时,里面的自动赋值给updateTime的时候报错
(ps:学习AOP相关知识请参考:SpringBoot的特性之一:AOP-CSDN博客)
以下是报错信息:
06-05 11:39:19 INFO : <===== AutoInsert start =====>
06-05 11:39:19 INFO : <===== AutoInsert Type:UPDATE =====>
06-05 11:39:19 ERROR : <===== AutoInsert error =====>
06-05 11:39:19 ERROR : 全局异常信息 ex=java.lang.NoSuchMethodException: com.ycg.vue.Entity.UserEntity.setUpdateTime(lombok.Data)
06-05 11:39:19 WARN : Resolved [java.lang.RuntimeException: java.lang.NoSuchMethodException: com.ycg.vue.Entity.UserEntity.setUpdateTime(lombok.Data)]
以下是本人aop原代码片段:
case UPDATE: {log.info("<===== AutoInsert Type:UPDATE =====>");entity.getClass().getDeclaredMethod(AspectConstant.SET_UPDATE_BY, String.class).invoke(entity, ThreadLocalContext.getUserId());entity.getClass().getDeclaredMethod(AspectConstant.SET_UPDATE_TIME, Date.class).invoke(entity, now);break;
}
报错和提示大概是说,无法映射到date这个类,查阅大量资料无果后开始一点点排查,先是去实体类中手写了一个set方法还是不行,然后就发现,反射的实体类字段的类型我写的是Date.class,我就想是不是因为有好几个Date类,所以不知道映射哪一个,然后我就把类改成了jdk的,也就是:java.util.Date.class。
case UPDATE: {log.info("<===== AutoInsert Type:UPDATE =====>");entity.getClass().getDeclaredMethod(AspectConstant.SET_UPDATE_BY, String.class).invoke(entity, ThreadLocalContext.getUserId());entity.getClass().getDeclaredMethod(AspectConstant.SET_UPDATE_TIME, java.util.Date.class).invoke(entity, now);break;
}
完美解决,其实这时候我才发现,没改之前把鼠标放上去还出现了Argument is not assignable to 'lombok.Data' 的提示,正好也跟上面吻合,我太爱(tao yan)反射了,看来还是不够细心,还需努力啊!
这篇关于解决SpringBoot在使用AOP切片时DATE类型出现Argument is not assignable to ‘lombok.Data‘ 的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!