Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Jackson异常的序列化和反序列化_Java_Json_Jackson - Fatal编程技术网

Java 带Jackson异常的序列化和反序列化

Java 带Jackson异常的序列化和反序列化,java,json,jackson,Java,Json,Jackson,正如答案所示,当我对容器进行序列化和反序列化时,出现了以下异常: 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.StdDeserializerPr

正如答案所示,当我对容器进行序列化和反序列化时,出现了以下异常:

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

如果删除类型字段,则会得到以下信息:org.codehaus.jackson.map.exc.UnrecognizedPropertyException:Unrecognized字段“type”(Class com.chat.jsonobject.Message),未标记为可忽略