public class MapParseTest
{
private final ObjectMapper mapper;
public MapParseTest()
{
mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.setSerializerModifier(new MyMapSerializerModifier());
mapper.registerModule(module);
}
public void doTest() throws JsonProcessingException
{
MyMap map1 = new MyMap();
MyMap map2 = new MyMap();
map1.setName("shtame");
map2.setName("magic name");
map1.put("First", 1);
map1.put("Second", "Two");
map1.put("Third", map2);
map2.put("Eleventh", 11);
map2.put("Twelfth", "12");
String result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map1);
System.out.println(result);
}
public static void main(String[] args) throws JsonProcessingException
{
MapParseTest test = new MapParseTest();
test.doTest();
}
@Setter
@Getter
public static class MyMap extends HashMap<String, Object>
{
private String name;
}
public static class MyMapSerializer extends JsonSerializer<MyMap>
{
private final JsonSerializer<Object> defaultSerializer;
public MyMapSerializer(JsonSerializer<Object> defaultSerializer)
{
this.defaultSerializer = defaultSerializer;
}
@Override
public void serialize(MyMap value,
JsonGenerator gen,
SerializerProvider provider) throws IOException
{
String className = value.getName();
if (className.equalsIgnoreCase("magic name"))
{
gen.writeString("magic string");
} else
{
defaultSerializer.serialize(value, gen, provider);
}
}
}
public static class MyMapSerializerModifier extends BeanSerializerModifier
{
@Override
public JsonSerializer<?> modifyMapSerializer(SerializationConfig config,
MapType mapType,
BeanDescription beanDesc,
JsonSerializer<?> serializer)
{
Class<?> type = beanDesc.getBeanClass();
if (type.equals(MyMap.class))
{
return new MyMapSerializer((JsonSerializer<Object>) serializer);
}
return serializer;
}
}
}