在使用redis存儲點贊數據時,經常會遇到類型轉換異常。本文通過一個實際案例,分析并解決Java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String異常。
該問題出現在一個點贊功能中。后端接收點贊用戶信息(點贊用戶ID、被點贊文章ID和被點贊回答ID),并將其存儲到Redis。傳入數據類型為字符串,但程序卻拋出java.lang.ClassCastException異常。
代碼片段如下:
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:已點贊 //省略了構造部分 }
錯誤信息顯示異常發生在redisTemplate.opsForHash().put()方法中。原因是redisTemplate使用了StringRedisSerializer進行序列化,而Constant.REDIS_LIKE_CODE卻是Integer類型。StringRedisSerializer無法直接將Integer對象序列化為字符串,導致類型轉換異常。
解決方法是將Constant.REDIS_LIKE_CODE的類型修改為string類型。這樣StringRedisSerializer就能正確序列化該值并存儲到Redis中。 修改后,問題即可解決。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END