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

我想知道是否有某种方法可以正确反序列化以下内容:


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



隔江千里
浏览 241回答 2
2回答

莫回无

您可以将数据类的 Map 属性声明更改为不引用 Serializable:public class MyClass {&nbsp; &nbsp; &nbsp;Map<String, ?> map;&nbsp; &nbsp; &nbsp;OtherObject object;&nbsp; &nbsp; &nbsp;[...]}这也会影响 Map 的 getter 和 setter 的签名。然而,这确实放松了类型检查,并且映射的值可以是 Object 的任何子类,而不是 Serializable 的实现。如果这是一个重要的细节,您可以对映射值进行序列化后验证。或者您可以配置自定义反序列化器,正如您的问题评论中所建议的那样。这只是您想在哪里添加代码的问题,这取决于这种情况在您的应用程序中的广泛程度。

米琪卡哇伊

从 v2.10.0 开始,Jackson 支持“Serializable”值的简单反序列化,即,它将认为“Serializable”与“Object”相同。有关更多详细信息,请参阅此Github 问题。所以将 Jackson 更新到 2.10.0+ 并尝试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java