2

我在序列化抽象对象列表时遇到问题,杰克逊在标签上重复包装。

以下是我获得的一些结果:

<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 中。

关于如何解决问题的任何想法?

谢谢

4

1 回答 1

0

这可能会有所帮助。

JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
XmlMapper mapper = new XmlMapper(module);
于 2017-07-05T18:16:29.600 回答