【问题标题】:Deserializing Composite Objects in Java在 Java 中反序列化复合对象
【发布时间】:2012-09-05 21:23:15
【问题描述】:

我有一个关于反序列化复合对象的问题。我的对象如下所示:

public class Outside
{
   private String str1;
   private Inside s;
}

public class Inside
{
   private String str2;
   public Inside(String str2) 
   {
    this.field1 = str2;
   }
}

当我想反序列化对 Json 的响应时

Outside o = wr.accept(MediaType.APPLICATION_JSON_TYPE).get(Outside .class);

我得到以下异常 ....ClientHandlerException:未找到 Java 类外部、Java 类型类外部和 MIME 媒体类型 application/json 的消息正文阅读器

我不确定自己做错了什么。

【问题讨论】:

  • 您的意思是private Inside s; 而不是private Second s;?这看起来更像是 JAX-RS(Jersey 客户端?)问题,而不是反序列化问题。
  • 是的。谢谢指正。
  • 它在不是复合对象时有效。所以我猜应该和反序列化有关。
  • 这当然不是反序列化问题,因为它不需要无参数构造函数。
  • @bizclop - 我不同意你的说法(或者我只是不明白你的措辞)。我认为这是由Inside 类没有默认构造函数引起的反序列化问题。

标签: java deserialization


【解决方案1】:

java.lang.NoSuchMethodException: ....Inside.()

这是指Inside() 形式的构造函数,而你没有它——你只有Inside(String)。序列化需要一个无参数的构造函数,因此它可以轻松地使用反射来实例化您的对象,然后填写字段。

因此,您需要添加一个无参数构造函数。

【讨论】:

  • @user1558274:啊,是的,那么它似乎是一个不同的问题!
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多