java - Jackson - 将 Map 实现反序列化为 HashMap

标签 java json serialization jackson deserialization

所以,我有配置

.defaultTyping(NON_FINAL)

将正确的序列化 json 编写为:

"headers": [
        "org.springframework.messaging.MessageHeaders",
        {

现在,问题是 MessageHeaders 类正在实现 Map,但也重写了 put 方法,因此它引发异常。为了正确地反序列化它,我需要能够将其序列化为 HashMap,所以:

"headers": [
        "java.util.HashMap",
        {

或者能够将 MessageHeaders 显式反序列化为 HashMap(因为它实际上只是 Map。

还有一个问题是:如何将实现 Map 的对象序列化为 HashMap,或者如何将实现 Map 的对象反序列化为 HashMap。

最佳答案

好的,我找到了如何使用自定义序列化程序执行此操作(技巧是告诉序列化程序使用 java.util.HashMap 而不是真正的类名):

public class MessageHeadersJsonSerializer extends JsonSerializer<MessageHeaders>{
    @Override
    public void serializeWithType(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
        typeSer.writeTypePrefixForObject(value, gen, HashMap.class);
        serialize(value, gen, serializers);
        typeSer.writeTypeSuffixForObject(value, gen);
    }

    @Override
    public void serialize(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        for(Map.Entry<String, Object> entry : value.entrySet()){
            gen.writeFieldName(entry.getKey());
            gen.writeObject(entry.getValue());
        }
    }
}

然后将其注册为 MixIn:

@JsonSerialize(using = MessageHeadersJsonSerializer.class)
public abstract class MessageHeadersMixIn {}

在父对象上,我将其反序列化为 HashMap:

public abstract class GenericMessageMixIn<T> {
    @JsonCreator
    public GenericMessageMixIn(
            @JsonProperty("payload") T payload,
            @JsonProperty("headers") Map<String, Object> headers
    ){}
}

最后一切正常!

关于java - Jackson - 将 Map 实现反序列化为 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41063262/

相关文章:

java - 为什么以及何时在 Java 中使用可序列化对象

java - 使用自定义适配器重新排序 Recyclerview 项目

java - 如果碰巧内存不足,是否可以监控jboss?

java - 帮助 Neuroph 神经网络

php - 如何使用 php mysql 获取嵌套的 json 对象

.NET 4.5 中的序列化异常

java - 如何在 Spring 3 中处理客户端取消请求?

c - 使用 Visual Studio Code 任务自动化多个文件夹中的 C 生成文件

json - 如何序列化一个 QJSonObject?

java - 不了解java中序列化的基础知识