package com.fasterxml.jackson.databind.convert; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.*; import com.fasterxml.jackson.databind.util.StdConverter; // for [databind#795] public class ConvertingAbstractSerializer795Test extends BaseMapTest { public static abstract class AbstractCustomType { final String value; public AbstractCustomType(String v) { this.value = v; } } public static class ConcreteCustomType extends AbstractCustomType { public ConcreteCustomType(String v) { super(v); } } public static class AbstractCustomTypeDeserializationConverter extends StdConverter<String, AbstractCustomType>{ @Override public AbstractCustomType convert(String arg) { return new ConcreteCustomType(arg); } } public static class AbstractCustomTypeUser { @JsonProperty @JsonDeserialize(converter = AbstractCustomTypeDeserializationConverter.class) private final AbstractCustomType customField; @JsonCreator AbstractCustomTypeUser(@JsonProperty("customField") AbstractCustomType cf) { this.customField = cf; } } public static class NonAbstractCustomType { final String value; public NonAbstractCustomType(String v) { this.value = v; } } public static class NonAbstractCustomTypeDeserializationConverter extends StdConverter<String, NonAbstractCustomType>{ @Override public NonAbstractCustomType convert(String arg) { return new NonAbstractCustomType(arg); } } public static class NonAbstractCustomTypeUser { @JsonProperty @JsonDeserialize(converter = NonAbstractCustomTypeDeserializationConverter.class) private final NonAbstractCustomType customField; @JsonCreator NonAbstractCustomTypeUser(@JsonProperty("customField") NonAbstractCustomType customField) { this.customField = customField; } } /* /********************************************************** /* Test methods /********************************************************** */ private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); public void testAbstractTypeDeserialization() throws Exception { String test="{\"customField\": \"customString\"}"; AbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, AbstractCustomTypeUser.class); assertNotNull(cu); } public void testNonAbstractDeserialization() throws Exception { String test="{\"customField\": \"customString\"}"; NonAbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, NonAbstractCustomTypeUser.class); assertNotNull(cu); } }