class A<T extends Animal>{
@XmlElement
T animal;
}
@XmlRootElement(name="animal")
class Animal{
}
//@XmlRootElement(name="Birds")
class Birds extends Animal{
ArrayList<String> someNames;
relavant fields ..with getter/setter and annotation
}
//@XmlRootElement(name="Fish")
class Fish extends Animal{
relavant fields ..with getter/setter and annotation
}
我可以使用org.codehaus.jackson将Bean转换为Json String。但是当我尝试使用org.codehaus.jackson
将Json String转换回Java Bean时JsonFactory jf = new JsonFactory();
JsonParser jp = null;
A<Bird> bird = null;
bird = inputMapper.readValue(jp, A.class);
我得到了
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "someNames" .
我已经在getter和setter上添加了@XmlElement注释。
答案 0 :(得分:0)
找到解决方案 http://programmerbruce.blogspot.in/2011/05/deserialize-json-with-jackson-into.html
参见上述链接的示例4。通过放置2个注释@JsonTypeInfo和@JsonSubTypes,问题就解决了。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Birds.class, name = "birds"),
@JsonSubTypes.Type(value = Fish.class, name = "fish") })
@XmlRootElement(name="animal")
class Animal{
}
请注意注释"type"
中的@JsonTypeInfo
参数。
1)序列化时,杰克逊框架引入了"type"
param。
对于Birds实例,"type"
被引入为"animal":{"type":"birds", "":"" ....}
同样,在鱼类"type"
的情况下,"animal":{"type":"fish", "":"" ....}
2)在反序列化时,Jackson Framework使用"type"
参数在运行时实例化多态通用实例bean。