MapConversion4878Test.java
package com.fasterxml.jackson.databind.convert;
import java.util.Collections;
import java.util.Map;
import org.junit.jupiter.api.Test;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import com.fasterxml.jackson.databind.util.StdConverter;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MapConversion4878Test extends DatabindTestUtil
{
// [databind#4878]
static class MapWrapper4878 {
final Map<String, Object> value;
MapWrapper4878(Map<String, Object> value) {
this.value = value;
}
}
static class WrapperConverter4878 extends StdConverter<MapWrapper4878, Object> {
@Override
public Object convert(MapWrapper4878 value) {
return value.value;
}
}
@SuppressWarnings("serial")
static class Serializers4878 extends SimpleSerializers {
@Override
public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc) {
Class<?> rawClass = type.getRawClass();
if (MapWrapper4878.class.isAssignableFrom(rawClass)) {
return new StdDelegatingSerializer(new WrapperConverter4878());
}
return super.findSerializer(config, type, beanDesc);
}
}
// [databind#4878]
@Test
public void testMapConverter() throws Exception
{
SimpleModule sm = new SimpleModule();
sm.setSerializers(new Serializers4878());
final ObjectMapper mapper = jsonMapperBuilder()
.addModule(sm)
.build();
String json = mapper.writeValueAsString(new MapWrapper4878(Collections.singletonMap("a", 1)));
assertEquals(a2q("{'a':1}"), json);
}
}