第三方库的对象存到 Redis,取出的时候没有合适的构造器,反序列化失败有解吗

2020-07-28 23:11:16 +08:00
 sola97

在写 DiscordBot 引用的一个库中的 MessageEmebd 对象,想用 Redis 做消息队列,取出的时候反序列化失败
现在用的 GenericJackson2JsonRedisSerializer,其他序列化器也试过都不行

Could not read JSON: Cannot construct instance of `net.dv8tion.jda.api.entities.MessageEmbed$Field` (no Creators, like default construct, exist)

就是这个 MessageEmbed 里有个 public static class Field 没有无参构造器导致,也没办法去改他,目前我是直接用的 LinkedBlockingQueue 存,但是每次重启都要丢一些没消费完的数据,因为是自己写着玩的,所以凑活在用

2343 次点击
所在节点    Java
6 条回复
billlee
2020-07-28 23:34:49 +08:00
换序列化方案,java.io.Serializable 就不依赖默认构造函数。kryo 也可以配置。
GM
2020-07-28 23:43:28 +08:00
大概率无解。
考虑自己反序列化成 JsonNode 后,一个一个属性设置值。
sola97
2020-07-28 23:44:27 +08:00
@billlee #1 因为这个 class 没有实现 Serializable 接口所以试过不行,kryo 我去试试
sola97
2020-07-29 00:29:40 +08:00
@billlee #1 搞定了,感谢
Roni
2021-08-18 16:22:51 +08:00
怎么做的最后
sola97
2021-08-18 16:39:53 +08:00
@Roni #5 [让 kryo 支持反序列化没有无参构造方法的类]( https://blog.csdn.net/iteye_7863/article/details/82325126)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX