私には2つのクラスがあります:
@XmlRootElement
public class A {
private Long id;
private B b;
// setters and getters
}
そして
@XmlRootElement
public class B {
private Long id;
private String field1;
private String field2;
// setters and getters
}
デフォルトでは、クラスA
のインスタンスをXMLに変換すると、そのすべてのフィールド(id
)と参照されるB
クラスフィールド(id
、field1
、field2
) このような:
<a>
<id>2</id>
<b>
<id>5</id>
<field1>test1</field1>
<field2>test3</field2>
</b>
</a>
what参照クラスB
のフィールドをA
クラスのXMLに含めることはできますか?例えば。 A
クラスのインスタンスを変換するとき、id
クラスからB
を取得したいだけです(field1
およびfield2
フィールド)、したがって、私は取得したい:
<a>
<id>2</id>
<b>
<id>5</id>
</b>
</a>
B
クラスに永続的に注釈を付けたくありません(@XMLTransient
または@XMLElement
)B
クラス全体をそのまま(id
で、field1
およびfield2
。)B
クラスがA
から参照されている場合、これらのフィールドをすべてエクスポートしたくありません。
これはJAX-Bでも可能ですか?
@XmlTransient
フィールドで。また、デフォルトのJAXBバインディングは、 カスタムバインディング宣言 を使用して、グローバルスコープで、または必要に応じて個別にオーバーライドできます。
他の例については、 JAXBのガイド BaeldungのWebサイトをご覧ください。
アノテーション@XmlTransient
を使用して、フィールドを無視できます。この注釈をフィールド自体またはそのゲッターに配置します。
わかりました、私はいくつかのハッキーなソリューションを思い付きました:
_@XmlRootElement
public class A {
private Long id;
private B b;
// setters and getters
}
_
RESTユースケースのためだけに追加のゲッターを提供したので、次のようになります。
_@XMLTransient
public B getB() {
return b;
}
@XMLElement(name="b")
public Long getBForREST() {
return b.getId();
}
_
次の構造になります。
_<a>
<id>2</id>
<b>5</b>
</a>
_
私が目指していたのとまったく同じ構造ではありません。
私はこのソリューションが好きではありません-@XMLExclude({"field1", "field2"})
またはそのようなものは私の意見ではずっときれいです。
それにもかかわらず-今のところ、それは動作します。いですが、動作します。