我在序列化抽象对象列表时遇到问题,杰克逊在标签上重复包装。
以下是我获得的一些结果:
<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;
}
所有“扩展”类都有不同的属性,但配置类似于 VisibilityGroup。
我使用 spring boot 1.2.2 和 jackson 2.4.6 和woodstox 4.4.1。
在 Json 上一切都很好,但不是在 XML 中。
关于如何解决问题的任何想法?
谢谢