第一个坑 autoType is not suppor异常
从报错信息上看到,是阿里巴巴的fastjson报的错。
我debug了一下,发现redis读取出的数据全是 jsonObject对象,而不是我想要的Objec对象,肯定转换错误了。
我已经配置好了redis序列化,难道还让我用 jsonObject对象 再 转换一次?
这不能忍 🙌
我又听了隔壁大神的意见。
隔壁大神说:
fastjson为了安全打开AutoType功能 在1.2.25之后的版本,以及所有的.sec01后缀版本中,autotype功能是受限的。
所以我们需要自己开放AutoType功能的白名单;
解决有三种方式
添加白名单有三种方式,三选一,如下:
- 在代码中配置,配置fastjson时直接加上。
ParserConfig.getGlobalInstance().addAccept("com.zry.simpleblog2.");
如果有多个包名前缀,分多次addAccept
- 加上JVM启动参数
-Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao.
如果有多个包名前缀,用逗号隔开
- 通过fastjson.properties文件配置。
在1.2.25/1.2.26版本支持通过类路径的fastjson.properties文件来配置,配置方式如下:
fastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao.
如果有多个包名前缀,用逗号隔开
我直接使用第一种方法。完美解决。
第二个坑 类型转换异常
我springboot开发时 ctrl+F9 经常使用,热加载功能很方便。但是这一天在使用Springboot 配合 Redis做缓存处理的时出现了问题
我一使用热加载 ,就报出类型转换异常,最可笑的是同一类型转换出了错?
下面是报错信息:
网上又是一顿搜:
大概意思说是spring-boot devtools工具的问题,由于devtools导致服务重启,然后重启后ClassLoad和原来的ClassLoader不是同一个对象了,所以导致对象的Class也不一样,虽然看上去都是User,但是它就是不同的类型,因为它的Class也不相等。
我也在官网上发现了这个:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.livereload
这应该是给出了解决思路。
解决方案:
我直接不是用热加载,完全解决(不是)。
所以嗦:好不要再用fastjson了,bug不断。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63405.html