simil-6ren">
gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:31:30 24 4
gpt4 key购买 nike

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

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]

我在网上看到您需要告诉 Jackson 如何反序列化映射键,但我没有找到任何信息来解释如何进行此操作。 verb 类也需要在映射之外进行序列化和反序列化,因此任何解决方案都应保留此功能。

感谢您的帮助。

最佳答案

经过一天的搜索,我发现了一种基于 this question 的更简单的方法。解决方案是向 map 添加 @JsonDeserialize(keyUsing = YourCustomDeserializer.class) 注释。然后通过扩展 KeyDeserializer 并覆盖 deserializeKey 方法来实现您的自定义反序列化器。该方法将使用字符串键调用,您可以使用该字符串构建真实对象,甚至可以从数据库中获取现有对象。

所以首先在 map 声明中:

@JsonDeserialize(keyUsing = MyCustomDeserializer.class)
private Map<Verb, List<Verb>> similarVerbs;

然后创建将使用字符串键调用的反序列化器。

public class MyCustomDeserializer extends KeyDeserializer {
@Override
public MyMapKey deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException {
//Use the string key here to return a real map key object
return mapKey;
}
}

适用于 Jersey 和 Jackson 2.x

关于java - 使用 Jackson 反序列化非字符串映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11246748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com