JSON 嵌套类数据绑定 作为答案,当我序列化和反序列化容器时,我得到了这个异常:
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not find a Value deserializer for abstract type [simple type, class com.xiaonei.wap.ps.model.Container]
at org.codehaus.jackson.map.deser.StdDeserializerProvider._handleUnknownValueDeserializer(StdDeserializerProvider.java:321)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:116)
at org.codehaus.jackson.map.deser.StdDeserializer.findDeserializer(StdDeserializer.java:260)
at
Run Code Online (Sandbox Code Playgroud)
只需删除或重命名type字段 的 setter/getter
public class Container
{
private AAnimal animal;
public AAnimal getAnimal()
{
return animal;
}
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXTERNAL_PROPERTY, property="type")
@JsonSubTypes({ @Type(value = Cat.class, name = "cat"), @Type(value = Dog.class, name = "dog") })
public void setAnimal(AAnimal animal)
{
this.animal = animal;
}
}
public abstract class AAnimal
{
public String name;
}
Run Code Online (Sandbox Code Playgroud)
测试
String json = "{\"type\":\"cat\", \"animal\" : {\"name\":\"cat-mew\" }}";
Container val = o.readValue(json, Container.class);
System.out.println(o.writeValueAsString(val));
Run Code Online (Sandbox Code Playgroud)
输出是
{"animal":{"name":"cat-mew"},"type":"cat"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |