【记坑】freemarker拿不到对象的值

问题

先说楼主的运行环境:springboot+Lombok+mybatis+freemarker
mybatis使用generate mybatis来生成的dao层、实体类层、xml层
实体类给一个@Data,让它自己生成setter和getter方法

然后我就脑袋一抽照着数据库的属性值去freemarker中拿值了,结果半天一个值拿不到,只有神秘的空行占据着内容:
【记坑】freemarker拿不到对象的值_第1张图片
【记坑】freemarker拿不到对象的值_第2张图片
然而测试的字符串数据可以显示,那么显然不是freemarker坏了,是我坏了。

为什么

lombok的@Data的getter/setter是将属性的首字母大写再拼接到get或者set后面的,
比如说一个属性:pTid
那么lombok生成的是getPTid()
java自动生成是生成什么呢?getpTid()
注意到区别没有?
lombok不管你第二个字符大写还是小写,都让你首字母大写再拼成get方法,
而java自动生成是如果第二个字母大写了,就直接拼到get后面。

说到这?为啥我拿不到数据?
因为freemarker用的是java自动生成的这种规则来找get方法,我用lombok自动生成就使得这种第二个首字母大写的属性找不到了!
于是我翻来覆去没数据,查找了很多资料,上面满满的两个字:瞎搞!

解决方案

1、将lombok扔掉!,老老实实java自动生成的get/set属性,成也风云,败也风云!
2、将属性全部小写,这样lombok生成的就是符合规范的javabean形式,freemarker可以获取数据,但会对mybatis的xml文件增加难度,需要写跟数据库列名不一致的属性对接(但是free-mybatis插件生成的实体类的属性就是全小写的,作者真是机智)
3、lombok既不要扔掉,属性也不用改,在lombok的基础上再用java自动生成生成所有的get方法,这样freemarker又可以找到get方法了!

忠告:去实体类拿属性名,别去数据库拿,说不定你属性名写错了呢?

以上方法任意一个即可访问成功数据
【记坑】freemarker拿不到对象的值_第3张图片
哦,快瞧瞧它,它有数据了!
如果本文对你有所帮助,请点赞支持一下作者~

你可能感兴趣的:(javaWeb,spring学习)