como escrever deserializer jackson com base na propriedade em json

Eu quero escrever json deserializer no tipo de class para que quando o tipo é desserializado de determinado json com base no nome mapeia valor (do tipo interface Being) para sua implementação atual com base em algum método de fábrica que retorna o nome de class correto com base no nome e preenche restante class sem qualquer desserialização explícita e sem criar object de TigerBeing ou HumanBeing explicitamente usando new.

Eu tentei usar o @jsonCreator mas eu tenho que inicializar todo o HumanBeing ou TigerBeing usando o new e passando todo o json no construtor. Preciso de mapeamento automático para tipos mais usados, pois o pojo adicional pode ser bastante complexo.

{type:[{ "name": "Human", "value": { "height":6, "weight":100, "languages":["spanish","english"] } }, { "name":"Tiger", "value":{ "extinct":1, "found":["Asia", "America", "Europe", "Africa"] } } ]} I have: public class Type { String name; Being value; } public interface Being { } public class TigerBeing implements Being { Integer extinct; String[] found; } public class HumanBeing implement Being { Integer height; Integer weight; String[] languages; } 

 import java.io.IOException; public class BeingDeserializer extends JsonDeserializer { @Override public Expertise deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonMappingException { JsonNode node = jp.getCodec().readTree(jp); String beingName = node.get("name").asText(); JsonNode valueNode = node.get("value"); BeingName beingByName = ExpertiseName.getBeingByName(beingName); if(beingByName ==null) { throw new JsonMappingException("Invalid Being " + beingName); } Being being = JsonUtils.getObjectFromJsonNode(valueNode, ExpertiseFactory.getExpertise(beingByName).getClass()); return being; } } 

Dessa forma, consegui resolver o problema acima.