【问题标题】:Jackson Mapper throws Exception on Android, but not in Java SEJackson Mapper 在 Android 上抛出异常,但在 Java SE 中没有
【发布时间】:2011-10-27 14:28:56
【问题描述】:

我目前正在开发一个 Java Json 库。我自己做 HTTP 请求,让 Jackson 做 JSON 序列化。

该库在大多数情况下都可以正常工作,但在某些情况下却不行。

我有相当默认的 POJO:

      public class MyClass extends MyBase {
           @JsonProperty("MY_PROP")
           private string myProp;

           // ... some properties more

           @JsonProperty("DATA")
           private SubClass data;

           // ... getter/setter
      }

子类只是一个主要包含整数字段和两个双字段的类。超类包含来自服务器的一些状态信息。这种方式适用于其他 7 个响应类。

服务器响应看起来像

      {
         "MY_PROP":12,
         /* and so on*/
         "DATA":{ /* stuff */ }
      }

当我使用一个在 HTTP 响应到达时触发的小助手类时,我的 android 手机上出现以下异常:

org.codehaus.jackson.map.JsonMappingException:没有找到适合类型[简单类型,类 my.company.at.MyClassBase] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?)

但仅限于我的安卓手机。如果我在我的计算机上运行 Junit-Test - 它做的事情完全相同,我会得到反序列化的对象。有什么想法吗?

【问题讨论】:

    标签: android jackson


    【解决方案1】:

    我不知道根本原因,但是如果该类没有默认(无参数)构造函数,也许尝试添加一个?如果不存在构造函数,Javac 应该添加一个,但我想知道 Android 的编译器在这种情况下是否会生成不同类型的类。

    【讨论】:

    • 没有帮助。添加此构造函数后,它抛出了关于不是名为 MY_PROP 的无法识别的属性的奇怪异常。
    • 该错误表明(顾名思义)您尝试绑定的类未定义属性“MY_PROP”。快速提问:您是要绑定到 MyClass.class (有它)还是 MyBase.class (可能没有)?如果是后者,例外是有意义的。
    • 不,我将它绑定到 MyClass。我已经开始重新设计当前的应用程序,以便它使用 GSON 而不是 Jackson。目前 GSON 比 Jackson 快 100%,所以我想我将把精力投入到调整 GSON 上,而不是研究奇怪的 Dalvik/SUN JVM 差异。不过还是谢谢你的指点。
    • 那么祝 GSON 好运!当你遇到问题时,杰克逊仍然会在那里。 :-)
    猜你喜欢
    • 2013-05-17
    • 2014-01-29
    • 1970-01-01
    • 2015-02-24
    • 2016-08-10
    • 2015-04-25
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多