为了账号安全,请及时绑定邮箱和手机立即绑定

将 Jackson 与 Map<String, Serializable> 一起使用

将 Jackson 与 Map<String, Serializable> 一起使用

隔江千里 2022-01-19 15:30:13
我想知道是否有某种方法可以正确反序列化以下内容:public class MyClass {     Map<String, Serializable> map;     OtherObject object;     [...]}ObjectMapper mapper = new ObjectMapper();MyClass instance = mapper.readValue(someJson, MyClass);目前,我正在尝试,但我得到了一个例外com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of java.io.Serializable: abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您可以将数据类的 Map 属性声明更改为不引用 Serializable:


public class MyClass {

     Map<String, ?> map;

     OtherObject object;

     [...]

}

这也会影响 Map 的 getter 和 setter 的签名。然而,这确实放松了类型检查,并且映射的值可以是 Object 的任何子类,而不是 Serializable 的实现。如果这是一个重要的细节,您可以对映射值进行序列化后验证。


或者您可以配置自定义反序列化器,正如您的问题评论中所建议的那样。这只是您想在哪里添加代码的问题,这取决于这种情况在您的应用程序中的广泛程度。


查看完整回答
反对 回复 2022-01-19
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

从 v2.10.0 开始,Jackson 支持“Serializable”值的简单反序列化,即,它将认为“Serializable”与“Object”相同。有关更多详细信息,请参阅此Github 问题

所以将 Jackson 更新到 2.10.0+ 并尝试。


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信