我是靠谱客的博主 还单身红酒,最近开发中收集的这篇文章主要介绍分页结果做缓存报java.lang.Integer cannot be cast to java.lang.String错误,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
今天测试redis做的缓存分页报错java.lang.Integer cannot be cast to java.lang.String。类型转化出错。我的controller层中的方法
@RequestMapping(value = "/queryNewsByPage", method = RequestMethod.POST)
@ResponseBody
@Cacheable( cacheNames="news", key = "#p0")
public Result queryNewsByPage(@RequestParam("currentPage") Integer currentPage) {
PageUtil<News> pageUtil = newsService.queryNewsByPage(currentPage);
return ResultUtil.successResult(pageUtil);
}
下意识查看dao层和service层的方法参数,都是Integer类型,没毛病。后来意识到应该是缓存键的问题。redis中所有键都是字符串对象,字符串对象可以是能够用long类型保存的整数值。
如何理解这个问题:字符串和整数不在同一个对象结构中。redis中不能将Integer强制转化为String类型。转化为字符串必须通过String.valueOf(integer) 或者Integer.toString(integer)或者Integer.toString()
如何解决?将Integer转变为String类型
修改以后的代码:
@RequestMapping(value = "/queryNewsByPage", method = RequestMethod.POST)
@ResponseBody
@Cacheable( cacheNames="news", key = "#p0")
public Result queryNewsByPage(@RequestParam("currentPage") String currentPage) {
Integer currentPage1 = Integer.valueOf(currentPage);
PageUtil<News> pageUtil = newsService.queryNewsByPage(currentPage1);
return ResultUtil.successResult(pageUtil);
}
服务端收到前端的数据时会对数据进行一个取值,类似于
name = request.form.get('name', '')
age = int(request.form.get('age', '0'))
收到的值类型会根据方法参数的类型进行一个转化,这里将转化为String类型。
在调用service层时我们需要将String类型的值转化为一个Integer类型
–
最后
以上就是还单身红酒为你收集整理的分页结果做缓存报java.lang.Integer cannot be cast to java.lang.String错误的全部内容,希望文章能够帮你解决分页结果做缓存报java.lang.Integer cannot be cast to java.lang.String错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复