当前位置: 首页 > 面试题库 >

用Jackson反序列化非字符串映射键

杜俊逸
2023-03-14
问题内容

我有一张看起来像这样的地图:

public class VerbResult {
    @JsonProperty("similarVerbs")
    private Map<Verb, List<Verb>> similarVerbs;
}

我的动词类如下:

public class Verb extends Word {
    @JsonCreator
    public Verb(@JsonProperty("start") int start, @JsonProperty("length") int length,
            @JsonProperty("type") String type, @JsonProperty("value") VerbInfo value) {
        super(length, length, type, value);
    }
    //...
}

我想序列化和反序列化我的VerbResult类的实例,但是当我这样做时,出现此错误: Can not find a (Map) Key deserializer for type [simple type, class my.package.Verb]

我在网上阅读了您需要告诉杰克逊如何反序列化地图键的信息,但是我没有找到任何信息来解释如何进行此操作。动词类也需要在映射之外进行序列化和反序列化,因此任何解决方案都应保留此功能。


问题答案:

在此处给出的答案的基础上,建议使用反序列化器实现模块。所述JodaTime模块是一个易于理解的含有串行解串器模块的完整的例子。

请注意,杰克逊版本1.7中引入了模块功能,因此您可能需要升级。

所以一步一步来:

  1. 根据Joda示例为您的类创建一个包含(反)序列化器的模块
  2. 向该模块注册 mapper.registerModule(module);

一切都会好起来的



 类似资料:
  • 我想序列化和反序列化我的VerbResult类的实例,但是当我这样做时,我得到了这个错误:的(映射)键反序列化器 我在网上读到,你需要告诉杰克逊如何反序列化地图键,但我没有找到任何信息解释如何去做这件事。verb类也需要在映射之外进行序列化和反序列化,因此任何解决方案都应该保留此功能。

  • 我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio

  • 可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)

  • 我想反序列化以下XML(缩短示例): 到目前为止,我想出的代码: 但这种方法存在几个问题: > @JacksonXmlProperty t(localName="subject")始终为空,因为我将其用于类型信息。为什么?,或者如何绕过它? 还是这种方法已经错了? 最后是我使用的周围类:

  • 我正在尝试使用Jackson将反序列化为,但它不起作用。 我有一个带有LocalDateTime字段的数据类: 我添加了特殊的Jackson数据类型模块: 序列化可以在以下情况下正常工作: 结果字符串: 但反序列化不适用于: 作为错误,我得到: 我错过了什么?我对串行化有效而反序列化无效感到困惑。 MWE:(小格拉德尔Java项目) Main.java: build.gradle: