抽象オブジェクトのリストのシリアル化に問題があります。ジャクソンはタグのラッパーを複製します。
ここに私が得たいくつかの結果があります:
<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 のように構成されています。
私はスプリング ブート 1.2.2 と jackson 2.4.6 と woodstox 4.4.1 を使用しています。
Json ではすべてが適切ですが、XML ではそうではありません。
問題を解決する方法について何か考えはありますか?
ありがとう