package com.fasterxml.jackson.databind.creators; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; public class DelegatingExternalProperty1003Test extends BaseMapTest { static class HeroBattle { private final Hero hero; private HeroBattle(Hero hero) { if (hero == null) throw new Error(); this.hero = hero; } @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "heroType") public Hero getHero() { return hero; } @JsonCreator static HeroBattle fromJson(Delegate json) { return new HeroBattle(json.hero); } } static class Delegate { @JsonProperty @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "heroType") public Hero hero; } public interface Hero { } static class Superman implements Hero { String name = "superman"; public String getName() { return name; } } public void testExtrnalPropertyDelegatingCreator() throws Exception { ObjectMapper mapper = new ObjectMapper(); final String json = mapper.writeValueAsString(new HeroBattle(new Superman())); final HeroBattle battle = mapper.readValue(json, HeroBattle.class); assertTrue(battle.getHero() instanceof Superman); } }