簡體   English   中英

傑克遜異常的序列化和反序列化

[英]Serialization and Deserialization with Jackson Exception

作為答案的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

只需刪除或重命名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;
}  

測試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM