java - 反序列化继承列表的集合
问题描述
我正在尝试反序列化这样的接口:
public interface MyCollection<T> extends List<T> {...}
并且MyCollection
有多种实现方式,比如public class MyBasicCollection<String>
and public class MyOtherCollection<String>
。
我在界面上添加了注释,如下所示:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = MyBasicCollection.class, name = "basic"),
@JsonSubTypes.Type(value = MyOtherCollection.class, name = "other")
})
public interface MyCollection<T> extends List<T> {...}
序列化和反序列化的详细代码如下:
MyCollection<String> testCollection = new MyBasicCollection<String>();
ObjectMapper mapper = new ObjectMapper();
String serializedString = mapper.writeValueAsString(testCollection);
MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyCollection<String>>(){});
我会得到一个
找不到非具体集合类型的反序列化器
JsonMapping 异常。
但是,如果我将最后一行更改为
MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyBasicCollection<String>>(){});
它完美地工作。
有没有办法使反序列化与多态类型一起工作?
解决方案
推荐阅读
- python - 带有聊天客户端的 Flask webapp(使用 websockets 连接到另一台服务器)
- c# - 带有 UID 字段的 X500DistinguishedName
- android - Google Mobiles Ads Creative Preview not working
- python - Pytest 似乎与单元测试中引发的异常不匹配
- node.js - 如果令牌无效,拒绝不会返回响应 - nodejs
- sql - 使用 SQL Server 2019 在不同服务器上的只读副本
- azure-application-insights - Serilog 的 Application Insights 接收器无法记录“错误”消息
- python - 根据查找范围内最接近的日期合并列
- amazon-web-services - 您如何保持 Amazon Cloud 运行?
- c# - 为什么我得到:“选项 'SINGLE_USER' 不能在数据库 'master' 中设置。” 运行我的后端 C# 时?