我需要具有允许我序列化Map<CustomType1, CustomType2>的功能。
我创建了从JsonSerializer继承的自定义Serializer。
我还创建了简单的模块,并将其注册到我的映射器中。

SimpleModule myModule = new SimpleModule("myModule");
myModule.addKeySerializer(CustomType1.class, new CustomType1Serializer());
myModule.addSerializer(CustomType1.class, new CustomType1Serializer());
mapperInstance.registerModule(myModule);

而且,当我仅序列化CustomType1的实例时,它可以完美地工作,但是当我创建map并尝试对其进行序列化时, jackson 会跳过序列化器并使用StdKeySerializer如何解决这个问题???

感谢您的关注。

最佳答案

这个问题似乎与 jackson 对通用对象的处理有关。解决该问题的一种方法是使用超级类型标记严格定义地图类型。插图:

final ObjectMapper mapper = new ObjectMapper();

final SimpleModule module = new SimpleModule("myModule",
        Version.unknownVersion());
module.addKeySerializer(CustomType1.class, new CustomType1Serializer());
mapper.registerModule(module);

final MapType type = mapper.getTypeFactory().constructMapType(
        Map.class, CustomType1.class, CustomType2.class);
final Map<CustomType1, CustomType2> map = new HashMap<CustomType1, CustomType2>(4);
final ObjectWriter writer = mapper.writerWithType(type);
final String json = writer.writeValueAsString(map);

09-12 09:17