我在序列化Abstract对象列表时遇到问题,jackson会在标签上复制包装。
以下是我获得的一些结果:
<visibility>
<allowed/>
<autoSubscribed>
<autoSubscribed>
<regex attribute="isMemberOf" pattern="\Qxertif\E"/>
</autoSubscribed>
</autoSubscribed>
<obliged>
<obliged>
<regex attribute="isMemberOf" pattern="\QQadddsssss\E"/>
</obliged>
<obliged>
<regex attribute="isMemberOf" pattern="\Qabcdef\E"/>
</obliged>
</obliged>
</visibility>
或当我从我的抽象类中删除@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.WRAPPER_OBJECT,visible = true)时,我获得:
<visibility>
<allowed/>
<autoSubscribed>
<autoSubscribed attribute="isMemberOf" pattern="\Qxertif\E"/>
</autoSubscribed>
<obliged>
<obliged attribute="isMemberOf" pattern="\QQadddsssss\E"/>
<obliged attribute="isMemberOf" pattern="\Qabcdef\E"/>
</obliged>
</visibility>
这几乎是好的,但我想要标签中的类型。 类似的东西:
<visibility>
<allowed/>
<autoSubscribed>
<regex attribute="isMemberOf" pattern="\Qxertif\E"/>
</autoSubscribed>
<obliged>
<regex attribute="isMemberOf" pattern="\QQadddsssss\E"/>
<regex attribute="isMemberOf" pattern="\Qabcdef\E"/>
</obliged>
</visibility>
以下是我的目标:
@Data // from lombok
public class Visibility implements Serializable {
private List<VisibilityAbstract> allowed = new ArrayList<>();
private List<VisibilityAbstract> autoSubscribed = new ArrayList<>();
private List<VisibilityAbstract> obliged = new ArrayList<>();
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = VisibilityGroup.class, name = "group"),
@JsonSubTypes.Type(value = VisibilityRegex.class, name = "regex"),
@JsonSubTypes.Type(value = VisibilityRegular.class, name = "regular")
})
public abstract class VisibilityAbstract implements Serializable {
}
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, visible = true)
@JsonTypeName(value = "group")
public class VisibilityGroup extends VisibilityAbstract implements Serializable {
@NonNull
@JacksonXmlProperty(isAttribute = true)
private String name;
}
所有&#34;延伸&#34; class具有不同的属性,但配置为VisibilityGroup。
我使用带有jackson 2.4.6和带有woodstox 4.4.1的弹簧靴1.2.2。
On Json一切都很好,但不是XML。
关于如何解决问题的任何想法?
感谢
答案 0 :(得分:0)
这可能有所帮助。
JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
XmlMapper mapper = new XmlMapper(module);