gpt4 book ai didi

java - Json Jersey 反序列化 : Abstract Class

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:36 25 4
gpt4 key购买 nike

我正在尝试使用 Java 中的 Jersey/Jackson 反序列化一些 JSON。

这是我的 JSON 示例

    {
"text":"toto",
"link":"titi",
"items":[{
"text":"toutou",
"link":"tata",
"items":[{
"text":"toto2",
"link":"toutou2",
"data":"tonti",
]}
]}
}

那么我的 Java 模型部分看起来像这样

public IItem {
...
}

public Item implements IItem {
List<IItem> items;
String text;
String link;
...
}

public ItemData extends Item {
String data;
...
}

现在,当我尝试反序列化我的 JSON 时,对象映射器不知道要使用哪个具体类。我怎么告诉他这个?问题是我想要一个项目(带有一个项目列表(带有一个 ItemData 列表))。

虽然我只使用一个包含所有字段(文本、链接、数据)的对象,但我更喜欢这种看起来更适合我的设计。你觉得值得吗?

实际上,我有多个字段需要复制,因为 JSON 结构有点复杂,为了清楚起见,我对其进行了简化。

问题 2 : 之后我需要在 JSON 中再次序列化我的对象(第一部分只是为了临时开发,我稍后会从 JDBC 驱动程序填充对象),我怎么知道 Jersey 一次只能显示一个级别?

即我请求 / 我只想要第一级,答案应该是:

    {
"text":"toto",
"link":"titi",
"items":[{
"text":"toutou",
"link":"tata",
]}
}

如果我请求 /tata 答案应该是:

    {
"text":"toutou",
"link":"tata",
"items":[{
"text":"toto2",
"link":"toutou2",
"data":"tonti"
]}
}

(问题更多是关于如何在我的第一个请求中隐藏第二个级别,我知道如何处理第二个请求)。

谢谢,

最佳答案

如果您使用 Jackson,它有一个功能允许在这些情况下进行适当的反序列化(项目的多态列表)。您可以使用 @JsonTypeInfo 注释来指示您希望将对象类型包含在 JSON 中,然后使用它来反序列化正确的实例。这是一个例子:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
public IItem {
// ...
}

这将为 IItem 的每个序列化表示添加一个属性,称为 @class,Jackson 稍后将检测并使用它来反序列化正确的对象实例。

关于java - Json Jersey 反序列化 : Abstract Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com