Ich habe Probleme beim Serialisieren einer Liste von abstrakten Objekt, Jacksons Duplikate Wrapper auf Tags.Jackson XML-Probleme auf Serialisierung
Hier sind einige Ergebnisse, die ich erhalten:
<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>
oder wenn ich die @JsonTypeInfo entfernen (use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, sichtbar = true) von meiner abstrakten Klasse ich erhalte:
<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>
Das ist fast gut, aber ich möchte den Typ in das Tag. so etwas wie:
<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>
Hier meine Objekte sind:
@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;
}
All "erweitert" Klasse haben differents Eigenschaften sind aber wie VisibilityGroup konfiguriert.
Ich bin mit Springboot 1.2.2 mit Jackson 2.4.6 und mit Woodstox 4.4.1.
Auf Json ist alles gut, aber nicht in XML.
Irgendeine Idee, wie man das Problem löst?
danke
JsonTypeInfo.As.WRAPPER_OBJECT Entfernen – reos
Während keine direkte Lösung, würde ich empfehlen das Ausprobieren neuere Jackson Version (2.7.4 im Idealfall), da es seit 2.4 einige Fixes für XML-Handling gewesen sein. In Bezug auf die Lösung möchten Sie das "Wrappen" von "List" -Werten mit '@JacksonXmlElementWrapper (useWrapping = false)' deaktivieren. Es gibt auch eine Einstellung in 'XmlMapper', um den Standard für das Wrapping auf false zu setzen. – StaxMan
@reos: das hilft nicht, es bekommt den guten Weg, aber childs Tag Name ist nicht gut. Ich erhalte: –
nean