【问题标题】:How to select class for collection member in fasterxml JSON conversion如何在fastxml JSON转换中为集合成员选择类
【发布时间】:2017-04-28 22:49:03
【问题描述】:

在我的 REST 应用程序中,我使用 fasterxml 将 POJO 序列化和反序列化为 JSON。在这种情况下,我遇到了 List 等集合的问题。

public class JsonRequest {
    public int anumber;
    public String astring;
    public List<XyzClass> data;
}

anumberastring 属性可以很好地来回转换,无需任何注释。对于 **data*,虽然编译器可以看到 List 元素是(应该是)XyzClass,但杰克逊框架无法获得该信息,因此它不知道在反序列化元素时使用什么类。

由于某种原因,我无法理解有关使用哪个注释来解决此问题的文档。 @JsonDeserialize 注释对此没有帮助。谁能指出我正确的方向?

【问题讨论】:

  • Jackson 默认支持,无需显式注解即可使用。因此,根据我的理解,它应该可以工作。你能在serializingdeserializing 这个列表中显示你的 REST API 代码吗
  • 你能提供你的XYZclass的代码吗?以及您如何在资源类中使用 JsonRequest ?

标签: json jersey jackson json-serialization


【解决方案1】:

经过一番研究,我终于找到了如何进行这项工作。

public class JsonRequest {
    public int anumber;
    public String astring;
    @JsonDeserialize(contentAs = XyzClass.class) // <-- Added    
    public List<XyzClass> data;
}

为了回答上面 cmets 中的问题,XyzClass 的代码只是一个微不足道的 POJO,例如:

public class XyzClass {
    public String name;
    public int age;
}

让我大吃一惊的是,我正在寻找一个不存在的 @JsonDeserializeContentAs(class= XyzClass.class) 效果的注释,因为我错过了 的事实@JsonDeserilize 有一个 contentAs 选项。

希望这篇文章可以为其他人省去同样的麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2018-04-13
    相关资源
    最近更新 更多