相关疑难解决方法(0)

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

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

public class VerbResult {
    @JsonProperty("similarVerbs")
    private Map<Verb, List<Verb>> similarVerbs;
}
Run Code Online (Sandbox Code Playgroud)

我的动词类看起来像这样:

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);
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

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

我在网上看到你需要告诉杰克逊如何反序列化地图密钥,但我没有找到任何解释如何进行此操作的信息.动词类也需要在地图之外进行序列化和反序列化,因此任何解决方案都应保留此功能.

java jackson

18
推荐指数
3
解决办法
3万
查看次数

杰克逊地图序列化模块

我有一个包含Map(带非String键)和其他一些字段的Class.

public class MyClass() {
    private Map<KeyObject, OtherObject> map;
    private String someField;

    public MyClass(Map<KeyObject, OtherObject> map, String someField) {
        this.map = map;
        this.someField = someField;
    }

    // Getters & Setters
}
Run Code Online (Sandbox Code Playgroud)

我想使用Jackson对这个类进行序列化和反序列化.我看到了不同的方法,并决定尝试使用jackson模块.

我按照这篇文章并扩展了JsonDeserializer和JsonSerializer.问题是应该键入这些类,所以看起来应该是这样的

public class keyDeserializer extends JsonDeserializer<Map<KeyObject, OtherObject>> {
...
}
Run Code Online (Sandbox Code Playgroud)

KeySerializer也是如此.

然后添加到模块:

module.addSerializer(new keySerializer());
module.addDeserializer(Map.class, new keyDeserializer());
Run Code Online (Sandbox Code Playgroud)

但这显然是错误的,因为我得到了一个例外:

keySerializer does not define valid handledType() -- must either register with method that takes type argument  or make serializer extend 'org.codehaus.jackson.map.ser.std.SerializerBase'
Run Code Online (Sandbox Code Playgroud)

我可以将我的序列化器和反序列化器输入MyClass,但后来我必须手动解析所有这些,这是不合理的.

更新:

我设法通过使用注释绕过代码中的模块创建 …

java serialization map jackson jackson-modules

7
推荐指数
1
解决办法
7234
查看次数

标签 统计

jackson ×2

java ×2

jackson-modules ×1

map ×1

serialization ×1