我有以下要反序列化的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;
}
但这种方法存在一些问题:
我不想使用&#34; subject&#34;为@JsonTypeInfo。相反,我想使用标签名称(突出显示,文本,...)。如何从XML中获取此信息?
@JacksonXmlPropert(localName =&#34; subject&#34;)始终为null,因为我将其用于类型信息。为什么?或者如何绕过它?
或者方法已经错了?
最后我使用的是周围的课程:
@JacksonXmlElementWrapper(localName = "annots")
@JacksonXmlProperty(localName = "annots")
public List<Annotation> annots;
答案 0 :(得分:0)
我能够使用Annotation
和Highlight
的正确Text
子类型解析此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制作一些内容。