如何根据json中的属性编写jackson反序列化器

我想在类Type上编写json反序列化器,这样当基于名称从给定的json反序列化Type时,它会根据某些工厂方法将值(类型为接口Being)映射到其当前实现,该工厂方法根据名称返回正确的类名,并填充剩余的类没有任何明确的反序列化,也没有明确地使用new创建TigerBeing或HumanBeing的对象。

我试图使用@jsonCreator,但我必须使用new初始化整个HumanBeing或TigerBeing并在构造函数中传递所有json。 我需要自动映射进一步用作进一步pojo的类型可能非常复杂。

{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; } } 

通过这种方式,我能够解决上述问题。