首页 > 数据库 >java中使用RedisTemplate读取数据异常 Missing type id when trying to resolve subtype of [simple type, class ja

java中使用RedisTemplate读取数据异常 Missing type id when trying to resolve subtype of [simple type, class ja

时间:2023-04-25 10:33:19浏览次数:28  
标签:java Object id type class redisTemplate

java中使用RedisTemplate读取数据异常 Missing type id when trying to resolve subtype of [simple type, class java.lang.Object]: missing type id property '@class' at [Source: (byte[])"

报错:

Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class java.lang.Object]: missing type id property '@class'
 at [Source: (byte[])"{"name":"测试","phone":"123","idCard":"12345","channelCode":"0"}"; line: 1, column: 66]

原代码:

@Autowired
private RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForValue().set(token, JSONUtil.toJsonStr(currentUserInfo), tokenExpireTime, TimeUnit.SECONDS);
String userInfoRaw = redisTemplate.opsForValue().get(token);         

错误原因:

调用redis存储对象时,我用了hutool的JSONUtil.toJsonStr来序列化对象,这个工具类的底层是GenericJackson2JsonRedisSerializer ,它在把对象转化为json时会丢失@class信息,造成redis可以存储,不能读取的bug。

解决方法:

直接储存对象,交给redisTemplate来序列化,或手动使用Jackson2JsonRedisSerializer序列化对象。

修改后代码:

@Autowired
private RedisTemplate<String, Object> redisTemplate;
redisTemplate.opsForValue().set(token, currentUserInfo, tokenExpireTime, TimeUnit.SECONDS);
Object userInfoRaw = redisTemplate.opsForValue().get(token);         

标签:java,Object,id,type,class,redisTemplate
From: https://www.cnblogs.com/yiyuzi/p/17351887.html

相关文章

  • java 分词统计
    依赖(谷歌基于lucene的中文分词IKAnalyzer)<dependency><groupId>org.wltea</groupId><artifactId>ikanalyzer</artifactId><version>5.0.2</version></dependency><dependency><groupId>org.apache.lucen......
  • JavaScript回调函数
    一种场景js需要等待一个函数执行完后再执行另一个函数或者其他的操作。本编以最简单的例子来说明回调函数的执行过程。回调函数备注上就是以函数对象作为参数进行传递。demo<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>......
  • Java设计模式-简单工厂模式
    简介在软件开发过程中,设计模式是一种被广泛应用的实践,它是通过总结、归纳和提炼出软件设计经验,从而使得设计更加优雅、高效。简单工厂模式是设计模式中最基本、最简单的一种模式,它能够有效地封装对象的创建过程,简化代码结构。简单工厂模式又称为静态工厂方法模式,它是通过定义一......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......
  • GraalVM(云原生时代的Java)和IoT在边缘侧落地与实践
    环顾四周,皆是对手!云时代的掉队者,由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心,在越来越流行的边缘计算、IoT方向上也是难觅踪影;Java语言在业务服务开发中孤独求败,但在系统级应用领域几乎是C、C++、搅局者Go、黑天鹅Rust的天下;移动应用、敏捷......
  • 使用typescript实现Promise
    /***@nameMyPromise*@description简单实现Promise*@author*****/classMyPromise<T>{//存放成功的回调函数privateresolveFn:Function=()=>{};//存放失败的回调函数privaterejectFn:Function=()=>{};//当前的状态/......
  • JavaScript 正则表达式
    基本使用 //定义正则表达式 constreg=/^\d{4}-\d{1,2}-\d{1,2}$/; conststr="2020-11-11"; //验证字符串是否符合规则 reg.test(str);元字符^表示开始部分等于xxx$表示结束部分等于xxx[]表示字符串中存在中括号中定义的字符,可以使用连字符,如a-z表示可以匹......
  • No bean named 'org.springframework.context.annotation.ConfigurationClassPostProc
       今天在重启springboot时候一直报如上的代码,但是也没有具体的报错信息。很是郁闷。   最后发现有两个:一个是使用@ComponentScan的问题,一个是@MapperScan的问题。@MapperScan默认是当前目录,我的目录和我引用的dao的目录不同导致的。   2.@Autowire和@Resource......
  • Java基础
    Java基础Java基础篇JDK和JRE的区别是什么?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。总结:JDK包含了JRE,同时还包含了编译java源码的编译器......
  • JAVA运算符详解
    JAVA运算字符详解赋值运算符符号作用说明=赋值inta=10;将10赋值给变量a+=加后赋值a+=b;将a+b的值给a-=减后赋值a-=b;将a-b的值给a*=乘后赋值a*=b;将a*b的值给a/=除后赋值a/=b;将a/b的值给a%=取余后赋值a%=b;将a%b的余数......