2012-12-27 77 views
4

JSON nest class data binding 的答案一樣,當我序列化和反序列化,我得到這個異常的容器:序列化和反序列化與傑克遜異常

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 

回答

0

只需刪除或type場重命名的setter /吸氣

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

test

String json = "{\"type\":\"cat\", \"animal\" : {\"name\":\"cat-mew\" }}"; 
    Container val = o.readValue(json, Container.class); 
    System.out.println(o.writeValueAsString(val)); 

輸出是

{"animal":{"name":"cat-mew"},"type":"cat"} 
+0

你能解釋爲什麼嗎? –

+1

如果我刪除類型字段,我得到這個:org.codehaus.jackson.map.exc.UnrecognizedPropertyException:無法識別的字段「類型」(類com.chat.jsonobject.Message),未標記爲可忽略 – Felix