Redis:ClassCastException【bug】

news2025/1/11 17:01:22

Redis:ClassCastException【bug】

  • 前言
  • 版权
  • Redis:ClassCastException【bug】
    • 错误产生
    • 相关资源
      • 控制器:UserController("/user")
      • 配置:RedisConfiguration
      • 实体类:User
      • 数据表:User
    • 解决
  • 最后

前言

2024-3-15 16:31:58

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

版权

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

Redis:ClassCastException【bug】

错误产生

    @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.lang.ClassCastException: com.jsss.entity.User cannot be cast to com.jsss.entity.User

在这里插入图片描述

如果重新启动项目
就没有了报错
前端刷新页面
传入token还能拿到user的json串

相关资源

控制器:UserController(“/user”)

    @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

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

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

-- 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,就会有类型转换的问题。

还没有尝试解决

最后

我们都有光明的未来

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1520079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch之通过update_by_query和_reindex重建索引

写在前面 当我们索引的mapping&#xff0c;setting发生变更时&#xff0c;我们需要重建索引来使得这些变更生效。es提供了两种方式来完成重建索引的操作&#xff1a; 1:update by query,在本索引重建 2&#xff1a;reindex&#xff0c;在新索引上重建我们通过具体实例来分别看…

SSM SpringBoot vue智能手机参数分析平台

SSM SpringBoot vue智能手机参数分析平台 系统功能 首页 图片轮播 新闻资讯 手机信息 手机百科 登录注册 个人中心 后台管理 登录注册 个人中心 手机百科管理 用户管理 手机对比管理 配置管理 新闻资讯管理 手机信息管理 对比信息管理 我的收藏管理 开发环境和技术 开发语言…

Node.js基础+原型链污染

Node.js基础 概述&#xff1a;简单来说Node.js就是运行在服务端的JavaScript&#xff0c;Node.js是一个基于Chrome JavaScript运行时建立的一个平台 大小写变换&#xff1a; toUpperCase&#xff08;&#xff09;&#xff1a;将小写字母转为大写字母&#xff0c;如果是其他字…

【iOS ARKit】PhysicsBodyComponent

在学习完 RealityKit 进行物理模拟的相关理论知识后&#xff0c;下面通过使用 PhysicsBodyComponent 组件进行物理模拟演示&#xff0c;主要代码如下所示&#xff0c;稍后对代码进行详细解析。 // // PhysicsBodyView.swift // ARKitDeamo // // Created by zhaoquan du on…

禁止ie自动跳转edge

因为微软对ie已经彻底停止维护了&#xff0c;对于没有升级系统的用户来说&#xff0c;会自动更新edge然后将ie给禁止使用。下面方法有效的解决windows10下&#xff0c;禁止ie自动跳转edge。 方法一&#xff1a;对于2023年10月份前的更新可用 打开控制面板&#xff0c;点击网络…

一个能够自我游戏的贪吃蛇(pygame与搜索算法)

贪吃蛇小游戏再经典不过了&#xff0c;作为编程爱好者&#xff0c;代码编译的贪吃蛇&#xff0c;又能有怎样的成绩呢&#xff1f; 带着好奇&#xff0c;开始&#xff01; 先做一个普通的贪吃蛇游戏 引入相关package import pygame 定义相关配置变量 # 定义字体 font pyg…

Java 根据IP获取IP地址信息(离线)

<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region --><dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version></dependency> 地址&#xff1a;http…

DBA面试题:MySQL缓存池LRU算法做了哪些改进?

下图是MySQL&#xff08;MySQL5.7版本&#xff09;体系架构图 MySQL的InnoDb Buffer Pool 缓冲池是主内存中的一个区域&#xff0c;用来缓存InnoDB在访问表和索引时的数据。对于频繁使用的数据可以直接从内存中访问&#xff0c;从而加快处理速度。如果一台服务器专用作MySQL数据…

逻辑数据平台的 NoETL 之道(内含QA)

作者简介&#xff1a; 余俊&#xff0c;Aloudata 合伙人 & 技术副总裁。拥有 18 年互联网技术和大数据平台相关架构经验。作为主架构师及核心研发主导并完成了 Alibaba B2B 首个海量分布式 KV 存储系统&#xff0c;作为网站架构师负责 Aliexpress 全球买全球卖交易系统的第…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

Adobe PDF背景设置护眼模式,缓解眼部疲劳

一、背景 在用Adobe PDF看论文时&#xff0c;默认的白色背景看久了&#xff0c;眼睛会特别疲劳&#xff0c;下面介绍如何设置背景为护眼模式。 二、设置PDF为护眼模式 使用Adobe Acrobat Pro DC打开任意PDF文件&#xff0c;在上方工具栏选择“编辑”&#xff0c;在下拉菜单栏…

VS2022一个项目中运行多个c++程序

VS2022一个项目中运行多个c程序设置 问题情况解决 问题 一般使用vs2022都需要配置好一些路径依赖&#xff0c;但一个项目中只能使用一个源文件&#xff0c;这也是为了避免找不到那些依赖&#xff0c;可是我们就是想为了可以快速编写&#xff0c;而不是浪费在那些配置环境的时间…

基于java实用的音乐软件微信小程序的设计与实现【附项目源码】分享

基于实用的音乐软件微信小程序的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/weixin_43894652/88842586 一、引言 随着移动互联网的普及和微信小程序的兴起&#xff0c;音乐类小程序成为了用户随时随地享受音乐的重要工具。本需求文档旨在详细阐述一…

mac安装rust开发环境,使用brew安装和全局配置

mac下使用brew可以一键安装环境&#xff1a; brew install rustup 安装完成执行&#xff1a; rustup-init 按照提示配置即可&#xff1a; 出现&#xff1a; 想要全局生效&#xff1a; echo export PATH"$HOME/.cargo/bin:$PATH" >> ~/.bash_profile source…

企业级授权源码 – 高价值企业授权系统,内含授权系统、工单系统和盗版检测功能

企业授权系统功能简介&#xff1a; 1、网站管理&#xff1a;包括基本管理、系统设置、公告设置、接口设置、价格设置和下载设置等。 2、内容管理&#xff1a;包括文章管理和广告轮图管理&#xff0c;以及添加授权、授权列表和授权日志等。 3、订单管理&#xff1a;包括支付订…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

STM32初识2

复位和时钟控制&#xff08;RCC&#xff1a;reset clock control&#xff09; 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST 引脚上的低电平 ( 外部复位 ) 2. 窗口看门狗计数终止 (WWDG 复位 ) 3. 独立看门狗计数终止 (IWDG 复位 ) …

4、鸿蒙学习-@ohos.promptAction (弹窗)

创建并显示文本提示框、对话框和操作菜单。 说明 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 该模块不支持在UIAbility的文件声明处使用&#xff0c;即不能在UIAbility的生命周期中调用&#xff0c;需要在创建…

云计算 3月14号 (TCP三次握手和四次挥手)

1.TCP三次握手和四次挥手 1.TCP的传输过程&#xff1a; Seq 序列号 保障传输过程可靠。 ACK &#xff08;确认消息&#xff09; SYN &#xff08;在建立TCP连接的时候使用&#xff09; FIN &#xff08;在关闭TCP连接的时候使用&#xff09; 3.TCP建立连接的过程&…

3.Gen<I>Cam文件配置

Gen<I>Cam踩坑指南 我使用的是大恒usb相机&#xff0c;第一步到其官网下载大恒软件安装包,安装完成后图标如图所示&#xff0c;之后连接相机&#xff0c;打开软件&#xff0c;相机显示一切正常。之后查看软件的安装目录如图&#xff0c;发现有GenICam和GenTL两个文件&am…