getSessionAttr返回值不能强转为Record的问题(偶尔出现)

用getSessionAttr获取缓存中的数据,应该用的是Record接收,但是会出现不能强转为Record的错误,关键字是这种错误出现率很小,一般情况下都是正常的。以下为所在代码与错误截图:

Record userMap = getSessionAttr("userInfo");

blob.png

请问这是什么原因?


评论区

JFinal

2016-10-15 15:41

根据异常信息可以看到:com.dlb.dao.WebUser 这是一个独立的类型,并不是 Record,转换的时候当然就出问题

很显然,是程序在某个地方向使用了相同的 key,向 session 中放入了 WebUser 对象,而不是 Record 对象,搜索一下代码中的 "userInfo" 这个 key 值就会发现,除了利用这个 key 向 session 中放入过 Record,还放入过 WebUser

jinyuanyuanab

2016-10-15 15:52

经过您的提醒已经发现了问题,多谢!!

jinyuanyuanab

2016-10-15 16:18

找到出现问题的地方了,但是那里是把前台传过来的对象getModel为POJO类放到zession里的,怎么把POJO转为Record对象呢?

JFinal

2016-10-15 19:13

@jinyuanyuanab 看 model 中是否有个 toModel()方法,还可以试试 new Record() 后往里面切set model 进去

jinyuanyuanab

2016-10-15 19:32

没有toModel,不过找到了getModel有一个toRecord()方法,返回值是Record的,这个应该可以用

JFinal

2016-10-15 19:50

@jinyuanyuanab 前面纯属手误,本是指 model.toRecord()

JFinal

2016-10-15 19:50

此外,还有一种方式: new Record().setColumns(model) 也可以

jinyuanyuanab

2016-10-16 19:28

谢谢波哥,已经成功解决问题!

热门反馈

扫码入社