错误信息
2023-06-01 00:04:05.186 [http-nio-8800-exec-4] ERROR com.yihang.exception.GlobalException:69 - msg : Could not read JSON: Could not resolve type id 'com.shiyi.vo.SystemUserVO' as a subtype of `java.lang.Object`: no such class found
at [Source: (byte[])"{"@class":"cn.dev33.satoken.dao.SaSessionForJacksonCustomized","id":"Authorization:login:session:7","createTime":1685454247115,"dataMap":{"@class":"java.util.concurrent.ConcurrentHashMap","current_user":{"@class":"com.shiyi.vo.SystemUserVO","id":7,"username":"admin","nickname":"管理员","avatar":"http://img.shiyit.com/FjzfvfWYZVED7eXMS4EL8KNR949K","status":1,"roleId":1}},"tokenSignList":["java.util.Vector",[{"@class":"cn.dev33.satoken.session.TokenSign","value":"51b7a831-b33a-4f30-be47-e3f6311"[truncated 36 bytes]; line: 1, column: 214] (through reference chain: cn.dev33.satoken.dao.SaSessionForJacksonCustomized["dataMap"]->java.util.concurrent.ConcurrentHashMap["current_user"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.shiyi.vo.SystemUserVO' as a subtype of `java.lang.Object`: no such class found
at [Source: (byte[])"{"@class":"cn.dev33.satoken.dao.SaSessionForJacksonCustomized","id":"Authorization:login:session:7","createTime":1685454247115,"dataMap":{"@class":"java.util.concurrent.ConcurrentHashMap","current_user":{"@class":"com.shiyi.vo.SystemUserVO","id":7,"username":"admin","nickname":"管理员","avatar":"http://img.shiyit.com/FjzfvfWYZVED7eXMS4EL8KNR949K","status":1,"roleId":1}},"tokenSignList":["java.util.Vector",[{"@class":"cn.dev33.satoken.session.TokenSign","value":"51b7a831-b33a-4f30-be47-e3f6311"[truncated 36 bytes]; line: 1, column: 214] (through reference chain: cn.dev33.satoken.dao.SaSessionForJacksonCustomized["dataMap"]->java.util.concurrent.ConcurrentHashMap["current_user"])
错误描述
根据提供的日志信息,出现了一个异常:
Could not resolve type id 'com.shiyi.vo.SystemUserVO' as a subtype of java.lang.Object: no such class found。
这个异常通常发生在使用 Jackson 序列化和反序列化 JSON 数据时,尝试解析一个未找到的类。
根据日志中的信息,看起来在序列化或反序列化过程中,Jackson 需要将 JSON 数据转换为 com.shiyi.vo.SystemUserVO 类型的对象,但是在应用程序的类路径中找不到该类。
之前代码是 com.shiyi.vo.SystemUserVO 类,我现在改为 com.yihang.vo.SystemUserVO 类,出现上面的错误信息,为什么没有了 com.shiyi.vo.SystemUserVO 类,还会出现,这是为什么呢?
解决方法
- 搜索整个项目代码,确保没有任何地方引用了 com.shiyi.vo.SystemUserVO 类。特别是在配置文件、其他类的引用和配置项中检查。
- 检查与序列化和反序列化相关的代码,如 Jackson 的配置、自定义序列化器或反序列化器等。确保没有任何地方使用了 com.shiyi.vo.SystemUserVO 类。
- 检查项目的构建配置,如 Maven 或 Gradle 的依赖项。确保没有依赖项仍然引用了 com.shiyi.vo.SystemUserVO 类。清理和重新构建项目,以确保修改生效。可以尝试删除编译输出目录(如 target 或 build 文件夹),然后重新编译项目。
- 清除redis缓存
我的解决
我将前面三种方法都一一试过了之后,发现还是不行,后面看着错误日志,想了想,是否是之前,没有改动前,启动了项目,存储了com.shiyi.vo.SystemUserVO 的redis缓存???
接着我清除redis缓存,再次启动项目。哎,可以了,项目没有报错。
注意
清除redis,一定要确定清楚了以后才执行清空缓存的命令,如果不确定能不能清除,最好先确定了以后才清楚,否则不要轻易清除。
常见命令及作用:
flushall:清空整个redis 服务器的数据(删除所有数据库的所有 key )。
flushdb:清空当前数据库中的所有 key。