杰克逊异常的序列化和反序列化 [英] Serialization and Deserialization with Jackson Exception

查看:113
本文介绍了杰克逊异常的序列化和反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

JSON嵌套类数据绑定
作为答案,当我序列化和反序列化容器我得到了这个异常:

JSON nest class data binding as the answer did, When I Serialization and Deserialization the Container I got this exception:

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


推荐答案

只需删除或重命名setter / getter for type field

Simply remove or rename setter/getter for type field

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

这篇关于杰克逊异常的序列化和反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆