关于序列化的Jackson XML问题

时间:2016-06-06 17:22:54

标签: java spring jackson jackson-dataformat-xml

我在序列化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。

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

感谢

1 个答案:

答案 0 :(得分:0)

这可能有所帮助。

JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
XmlMapper mapper = new XmlMapper(module);