まず、私は JAXB と Spring の世界では初心者なので、非常に明白な何かを見逃した場合は、返信せずに誰かが指摘してくれると本当にありがたいです。:)ここで解決策を探してみましたが、良い答えが見つかりませんでした。
同じ抽象クラス A から継承するサブクラス DTO (A1、A2、A3 など) がたくさんあります。残りのクエリの結果がサブクラス型のリストを返すようにします。結果を表す次のクラスがあります
@XmlRootElement(name="result")
@XmlSeeAlso({A1.class, A2.class, A3.class})
public class AResult<T>
{
...
}
AResult はジェネリックなので、 @XmlSeeAlso もジェネリックにして、次のように記述したいと思います
@XmlSeeAlso({(subclasses of A.class})
しかし、私がこのサイトや他の場所で行った調査から、JAXB でそれが可能であるとは思えません。
設定で注釈駆動型タグを使用するため、Jaxb2RootElementHttpMessageConverter クラスが自動的に使用されます。このメッセージ コンバーターは、特に @XmlSeeAlso で定義されたクラスを使用して JaxbContext を作成します。createMarshaller メソッドと getContext メソッドは、スーパークラスでは不変です。
ポイント 1 のため、クラスがクラス A のサブクラスであるかどうかを確認してから JaxbContext に追加できるクラスを作成することはできません。カスタム Jaxb2RootElementHttpMessageConverter またはカスタム Marshaller を使用できません。
どうすればこれを回避できますか? ところで、Spring バージョン 3.1.3 を使用しています。
ご協力いただきありがとうございます。