Java 使用Jackson序列化ImmutableMap

Java 使用Jackson序列化ImmutableMap,java,serialization,jackson,immutables-library,Java,Serialization,Jackson,Immutables Library,我正在尝试使用Jackson序列化ImmutableMap。自定义序列化器是专门为伪类编写的。对于其他人来说,默认行为是可以接受的。 它适用于伪类,但不适用于ImmutableMap对象 序列化程序类: public class DummySerializer extends StdSerializer<Dummy> { private final ObjectMapper mapper = new ObjectMapper(); protected DummySe

我正在尝试使用Jackson序列化ImmutableMap。自定义序列化器是专门为伪类编写的。对于其他人来说,默认行为是可以接受的。 它适用于伪类,但不适用于ImmutableMap对象

序列化程序类:

public class DummySerializer extends StdSerializer<Dummy> {
    private final ObjectMapper mapper = new ObjectMapper();

    protected DummySerializer(Class<Dummy> t) {
        super(t);
    }

    @Override
    public void serialize(Dummy dummyObj,
                          JsonGenerator gen,
                          SerializerProvider serializers)
            throws IOException {

        StringWriter writer = new StringWriter();
        mapper.writeValue(writer, dummyObj.getDummyId());
        gen.writeFieldName(writer.toString());
    }
}
公共类DummySerializer扩展了StdSerializer{
私有最终ObjectMapper mapper=新ObjectMapper();
受保护的Dummy系列化器(t类){
超级(t);
}
@凌驾
public void serialize(伪dummyObj,
JSONG发电机,
SerializerProvider序列化程序)
抛出IOException{
StringWriter编写器=新的StringWriter();
writeValue(writer,dummobj.getDummyId());
gen.writeFieldName(writer.toString());
}
}
用法:

ImmutableMap<Dummy, DummyInfo> map = //initialization
SimpleModule module = new SimpleModule();
module.addSerializer(new DummySerializer(Dummy.class));
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
mapper.writeValueAsString(map);
ImmutableMap=//初始化
SimpleModule=新的SimpleModule();
addSerializer(新的DummySerializer(Dummy.class));
ObjectMapper mapper=新的ObjectMapper();
映射器注册表模块(模块);
mapper.writeValueAsString(map);

没有看到指定的序列化,输出是ImmutableMap的默认字符串输出。

使用addKeySerializer而不是addSerializer解决了这个问题

SimpleModule module = new SimpleModule();
module.addKeySerializer(new DummySerializer(Dummy.class));

您是否尝试过从
jackson数据类型guava
注册
GuavaModule
,以便jackson知道如何处理ImmutableMap?