Jackson在列表中环绕对象

kt06eoxx  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在尝试创建一个Java库来管理Card.v1 JSON,用于Alternative Runtime Google Add-ons函数。我已经让一切正常工作了,但是在让Jackson按照Google API所要求的方式 Package 类时遇到了一些问题。
例如,他们有一个Section,其中包含一个Widget列表,这些Widget是 Package 的文本段落、图像或按钮列表。

"sections":[ {
 "widgets":[
    {
       "textParagraph":{
          "text":"Your random cat 2:"
       }
    },
    {
       "image":{
          "imageUrl":"https://cataas.com/cat"
       }
    },
    {
       "buttonList":{
          "buttons":[
             {
                "text":"Happy",
             },
             {
                "text":"Sad",
             }
          ]
       }
    }
 ]
} ]

我创建了一个Text类,如下所示:

@JsonTypeName("textParagraph")
@JsonTypeInfo(include= JsonTypeInfo.As.WRAPPER_OBJECT, use= JsonTypeInfo.Id.NAME)
public class TextParagraph extends BaseWidget
{
    String text;
}

如果我使用对象Map器自己编写这个代码,我会得到预期的JSON:

"textParagraph" : {
  "text" : "Testing Text"
}

但如果我有一个列表,然后打印它,它会失去“textParagraph” Package 。

{
  "widgets" : [ {
    "text" : "Testing Text"
  }, {
    "text" : "Testing Text 2"
  }, {
    "imageUrl" : "ggole.com/image.png",
    "altText" : "Image Text"
  } ]
}

是否缺少一个特殊的注解来 Package 列表对象?我真的很想在不使用任何自定义Map器或Wrapper类的情况下完成此操作。
有人在这里有经验吗?

lb3vh1jj

lb3vh1jj1#

好吧,我解决了。
在基类(BaseWidget)上,我需要添加@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)注解,这样列表就可以用 Package 器序列化。

相关问题