0

I am trying to serialize ImmutableMap<Dummy, DummyInfo> using Jackson. The custom serialiser is written specifically for Dummy class. Default behaviour is okay for the rest. It works fine for Dummy class but not for ImmutableMap object.

Serializer class:

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());
    }
}

Usage:

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);

Instead of seeing the specified serialisation, the output is default string output for ImmutableMap.

  • Have you tried registering `GuavaModule` from `jackson-datatypes-guava` so Jackson knows how to handle ImmutableMap? https://github.com/FasterXML/jackson-datatypes-collections/tree/master/guava – dnault Oct 26 '20 at 17:58

1 Answers1

0

Using addKeySerializer instead of addSerializer solved the issue.

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