gpt4 book ai didi

java - Jackson XML 反序列化、多态映射

转载 作者:行者123 更新时间:2023-12-02 08:30:16 24 4
gpt4 key购买 nike

我想要反序列化以下 XML(缩短的示例):

<annots>
<highlight subject="Highlight" page="0">
<contents>askdhaskjdhaskjhsakjhdakjshd</contents>
</highlight>
<text subject="Comment" page="0" title="Guest" color="#FFFF00">
<contents>Memo</contents>
</text>

</annots>

到目前为止我想出的代码:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "subject")
@JsonSubTypes({
@JsonSubTypes.Type(name = "Highlight", value = Highlight.class),
@JsonSubTypes.Type(name = "Comment", value = Text.class)
})

public abstract class Annotation {

@JacksonXmlProperty(localName = "subject")
public String subject;

@JacksonXmlProperty(isAttribute = true,localName = "page")
public String page;

@JacksonXmlProperty(isAttribute = true,localName = "rect")
public String rect;

@JacksonXmlProperty(isAttribute = true,localName = "flags")
public String flags;

@JacksonXmlProperty(isAttribute = true,localName = "name")
public String name;

@JacksonXmlProperty(isAttribute = true,localName = "title")
public String title;

@JacksonXmlProperty(isAttribute = true,localName = "color")
public String color;

@JacksonXmlProperty(isAttribute = true,localName = "opacity")
public String opacity;

@JacksonXmlProperty(localName = "contents")
public String contents;

}

但是这种方法有几个问题:

  1. 我不想对 @JsonTypeInfo 使用“主题”。相反,我想使用标签名称(突出显示、文本……)。我如何从 XML 中获取此信息?

  2. @JacksonXmlPropert(localName = "subject") 始终为 null,因为我将其用于类型信息。为什么?或者如何解决它?

  3. 或者这种方法已经是错误的吗?

最后是我使用的周边类:

@JacksonXmlElementWrapper(localName = "annots")
@JacksonXmlProperty(localName = "annots")

public List<Annotation> annots;

最佳答案

我能够使用 HighlightText 的正确Annotation 子类型以及可见的主题来解析此 xml。我必须指定该属性应该可见:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "subject",
visible = true)

此外,我使用 jackson 2.8.8 和 woodstox 5.0.3 进行 xml 解析。

上面解决了第 2 点。关于第 1 点,我认为这不能用 @JsonTypeInfo 来完成(如果有的话),因为它的整个想法是显式添加类型信息在生成的 xml 文档中。您也许可以使用 JsonTypeResolver 来解决一些问题.

关于java - Jackson XML 反序列化、多态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43737609/

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