问题描述
我正在尝试使用Jackson序列化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());
}
}
用法:
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的默认字符串输出,而不是看到指定的序列化。
解决方法
使用addKeySerializer代替addSerializer解决了该问题。
SimpleModule module = new SimpleModule();
module.addKeySerializer(new DummySerializer(Dummy.class));