2016-06-06 13 views
2

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

+0

JsonTypeInfo.As.WRAPPER_OBJECT Entfernen – reos

+0

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

+0

@reos: das hilft nicht, es bekommt den guten Weg, aber childs Tag Name ist nicht gut. Ich erhalte: nean

Antwort

0

Dies kann helfen. Versuchen

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