在Redis点赞功能中,Integer类型转换异常
在使用Redis存储拇指数据时,经常会遇到类型转换异常。本文分析并解决了java的实际案例.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String异常。
这个问题出现在一个喜欢的功能中。后端接收喜欢用户的信息(喜欢用户ID)、被表扬的文章ID和被表扬的回答ID)并存储在Redis中。传输的数据类型是字符串,但程序抛出java.lang.Clascascastexception异常。
代码片段如下:
RedisServiceImpl.java:
@Override public void saveliked2Redis(String likeUserId, String likePostId, String likeAnswerId) { String key = RedisKeyUtils.getLikedKey(likeUserId, likePostId, likeAnswerId); redisTemplate.opsForHash().put(RedisKeyUtils.MAP_KEY_USER_LIKED, key, Constant.REDIS_LIKE_CODE); }
RedisLikeController.java:
//点赞 @RequiresAuthentication @RequestMapping("/userLike") public ResponseJson userLike(@RequestBody UserLike userLike) { redisService.saveliked2Redis(userLike.getLikeUserId(), userLike.getLikePostId(), userLike.getLikeAnswerId()); return new ResponseJson(Constant.HTTP_CODE_OK, null, "点赞成功"); }
UserLike.java:
public class UserLike { private Integer id;///主键ID private String likeUserID;//喜欢人ID private String likePostID;///被点赞文章ID private String likeAnswerID;//被点赞回答ID private Integer status = 0;///表扬状态,默认不表扬0 0:未点赞 1:已点赞 //省略了结构部分 }
错误信息显示异常发生在redistemplatetet上.opsForHash().put()方法中。原因是redisTemplate使用StringRedisSerializer进行序列化,而Constant.REDIS_LIKE_CODE是Integer类型。Stringredisserializer不能直接将Integer对象序列为字符串,导致类型转换异常。
Constanttant解决方案.REDIS_LIKE_CODE类型修改为String类型。这样,Stringredisserializer就可以正确地将值序列化并存储在redis中。 修改后,问题就可以解决了。
以上是如何调查Redis点赞功能中Integer类型转换异常?详情请关注图灵教育的其他相关文章!
