Redis:ClassCastException【bug】

Redis:ClassCastException【bug】

前言

2024-3-15 16:31:58

以下内容源自《【bug】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

Redis:ClassCastException【bug】

错误产生

java 复制代码
    @RequestMapping(path = "/status", method = RequestMethod.GET)
    @ResponseBody
    public ResponseModel getUser(String token) {

        User user = null;
        if (StringUtils.isNotEmpty(token)) {
            user = (User) redisTemplate.opsForValue().get(token);
        }
        return new ResponseModel(user);
    }

有时候会报错

java 复制代码
java.lang.ClassCastException: com.jsss.entity.User cannot be cast to com.jsss.entity.User

如果重新启动项目

就没有了报错

前端刷新页面

传入token还能拿到user的json串

相关资源

控制器:UserController("/user")

java 复制代码
    @RequestMapping(path = "/status", method = RequestMethod.GET)
    @ResponseBody
    public ResponseModel getUser(String token) {

        User user = null;
        if (StringUtils.isNotEmpty(token)) {
            user = (User) redisTemplate.opsForValue().get(token);
        }
        return new ResponseModel(user);
    }

配置:RedisConfiguration

java 复制代码
package com.jsss.configuration;

import com.jsss.common.FastJsonSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
public class RedisConfiguration {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        template.setConnectionFactory(factory);

        // key serializer
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());

        // value serializer
        FastJsonSerializer fastJsonSerializer = new FastJsonSerializer();
        template.setValueSerializer(fastJsonSerializer);
        template.setHashValueSerializer(fastJsonSerializer);

        template.afterPropertiesSet();

        return template;
    }

}

实体类:User

java 复制代码
package com.jsss.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.sql.Timestamp;


/**
 * 用户账户:用于保存用户登录信息(User)表实体类
 *
 * @author jsss
 *@since 2024-2-29
 */

@Data
@Setter
@Getter
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {

    /**
     * 用户ID:[0,8388607]用户获取其他与用户相关的数据
     */

    @TableId(value = "user_id", type= IdType.AUTO)
    private Integer userId;

    /**
     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
     */

    @TableField("state")
    private Integer state;

    /**
     * 所在用户组:[0,32767]决定用户身份和权限
     */

    @TableField("user_group")
    private String userGroup;

    /**
     * 上次登录时间:
     */

    @TableField("login_time")
    private Timestamp loginTime;

    /**
     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
     */
    @TableField("phone")
    private String phone;

    /**
     * 手机认证:[0,1](0未认证|1审核中|2已认证)
     */

    @TableField("phone_state")
    private Integer phoneState;

    /**
     * 用户名:[0,16]用户登录时所用的账户名称
     */
    @TableField("username")
    private String username;

    /**
     * 昵称:[0,16]
     */

    @TableField("nickname")
    private String nickname;

    /**
     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
     */

    @TableField("password")
    private String password;

    /**
     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
     */

    @TableField("email")
    private String email;

    /**
     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)
     */

    @TableField("email_state")
    private Integer emailState;

    /**
     * 头像地址:[0,255]
     */
    @TableField("avatar")
    private String avatar;

    /**
     * 创建时间:
     */
    @TableField("create_time")
    private Timestamp createTime;

}

数据表:User

sql 复制代码
-- auto-generated definition
create table user
(
    user_id     mediumint unsigned auto_increment comment '用户ID:[0,8388607]用户获取其他与用户相关的数据'
        primary key,
    state       smallint unsigned default '1'               not null comment '账户状态:[0,10](1可用|2异常|3已冻结|4已注销)',
    user_group  varchar(32)                                 null comment '所在用户组:[0,32767]决定用户身份和权限',
    login_time  timestamp         default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '上次登录时间:',
    phone       varchar(11)                                 null comment '手机号码:[0,11]用户的手机号码,用于找回密码时或登录时',
    phone_state smallint unsigned default '0'               not null comment '手机认证:[0,1](0未认证|1审核中|2已认证)',
    username    varchar(16)       default ''                not null comment '用户名:[0,16]用户登录时所用的账户名称',
    nickname    varchar(16)       default ''                null comment '昵称:[0,16]',
    password    varchar(64)       default ''                not null comment '密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成',
    email       varchar(64)       default ''                null comment '邮箱:[0,64]用户的邮箱,用于找回密码时或登录时',
    email_state smallint unsigned default '0'               not null comment '邮箱认证:[0,1](0未认证|1审核中|2已认证)',
    avatar      varchar(255)                                null comment '头像地址:[0,255]',
    create_time timestamp         default CURRENT_TIMESTAMP not null comment '创建时间:'
)
    comment '用户账户:用于保存用户登录信息';

解决

参考这个

https://learn.skyofit.com/archives/2334

好像是一些字段的类型不是Integer和String,就会有类型转换的问题。

还没有尝试解决

最后

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

相关推荐
星星点点洲34 分钟前
【Redis】RedLock实现原理
redis·缓存
我来整一篇39 分钟前
用Redis的List实现消息队列
数据库·redis·list
加什么瓦1 小时前
Redis——数据结构
数据库·redis·缓存
lybugproducer2 小时前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
青山是哪个青山2 小时前
Redis 常见数据类型
数据库·redis·bootstrap
杨不易呀2 小时前
Java面试全记录:Spring Cloud+Kafka+Redis实战解析
redis·spring cloud·微服务·kafka·高并发·java面试·面试技巧
morris1313 小时前
【redis】CacheAside的数据不一致性问题
redis·缓存策略·cache aside·数据不一致性
wjcurry4 小时前
我的实习日报
java·redis·mysql
我叫珂蛋儿吖4 小时前
[redis进阶六]详解redis作为缓存&&分布式锁
运维·c语言·数据库·c++·redis·分布式·缓存