JAXBでは、@ XmlElementWrapper属性を使用して要素のコレクションをラップするタグを指定できます。ただし、これらのラッパータグは、コレクションが空であっても表示されます(コレクションがnull
の場合は表示されません)。コレクションが空の場合、JAXBにラッパータグを省略させる方法はありますか?コレクションのアダプターを使用すると、JAXBがこれを解釈してコレクション内の各エレメントにアダプターを適用する必要があるため、機能していないようです。コレクションが空のときにJAXBでラッパータグを省略する
1
A
答えて
1
Marshal Event Callbacksを使用することで、ややこしい方法で目的の動作を強制することができます。
@XmlRootElement(name="example")
@XmlAccessorType(XmlAccessType.FIELD)
public class Example {
@XmlElementWrapper(name="wrapper")
@XmlElement(name="item")
private List<Item> items;
// invoked by Marshaller before marshalling
private void beforeMarshal(Marshaller marshaller) {
if (items != null && items.isEmpty())
items = null;
}
// ... getters and setters
}
どのようにマーシャルコールバックを使用するには、2つの代替の方法は実際にありますMarshal Event Callbacks で説明したように:
- は直接あなたのクラスに
beforeMarshal
および/またはafterMarshal
方法を入れて、それはそれです。 (これはもっと簡単な方法で、私はこれを私の答えに使ったのです)。 - Marshaller.Listenerを作成し、そこに
beforeMarshal
とafterMarshal
メソッドを記述します。このリスナーをMarshaller
に登録する必要があります。MyCollectionWrapper
があなたのラッパークラスを表すクラスであるjaxbMarshaller.setListener(new Listener() { @Override public void beforeMarshal(Object source) { if (source instanceof MyCollectionWrapper) { MyCollectionWrapper wrapper = (MyCollectionWrapper)source; if (wrapper.getCollection() != null && wrapper.getCollection().isEmpty()) { wrapper.setCollection(null); } } } });
:
1
あなたが追加することができますMarshaller
のリスナーメカニズムを使用することができます/リスナー以下のように設定します。
これは、コレクションが空のときにラッパータグを削除する必要があります。
関連する問題
- 1. Jaxbはタイムゾーンを省略します
- 2. 空のカスタムタイプのJSONを省略
- 3. がRで、インデックスの空集合を省略しようとすると、
- 4. xmlのアンマーシャリング時に空の配列要素を省略する
- 5. makeのタイプを省略することはできますか?
- 6. ノードを選択するときに子ノードを省略する
- 7. jqでドットフィルタを省略することはできますか?
- 8. ReactでsetState()を省略することはできますか?
- 9. 空白がないときにテキストのオーバーフローを省略記号に変更するには
- 10. timeformatの省略
- 11. EventTrigger.Actionsを省略することはできますか?
- 12. 略語を省略してPHPで読むことができるように書式を設定する
- 13. SQL:FROM句を省略する
- 14. 空白文字の代わり:text-overflowを使用するときの空白:省略記号
- 15. テキストオーバーフロー:省略記号とフレックス
- 16. フレキシボックスラップとオーバーフロー省略記号
- 17. の省略」のpythonで
- 18. スワイプクロージャー省略例?
- 19. 省略形
- 20. cssアニメーションは-moz-animationの省略形を得ることができますか?
- 21. TypeScriptクラスの省略可能なプロパティを省略するとデフォルト値に戻りますか?
- 22. EditTextを省略するには?
- 23. HTMLスタイルガイドGoogle vs W3Schools(省略可能なタグを省略)
- 24. StAXResultでTransformerを呼び出すときにXML宣言を省略する
- 25. RPMで.pyoファイルと.pycファイルを省略することはできますか?
- 26. コマンド実行時にbashでバックアップファイルを省略できますか?
- 27. Fortran 95の書き込み文で改行を省略する
- 28. jQueryのSerializeを省略フィールド
- 29. インラインJavaScriptのif文でelseを省略することはできますか?
- 30. matplotlib:savefigでepsのテキストと軸のラベルが省略されます