ジャクソンと連携する JaxB アノテーション @XmlJavaTypeAdapter の例はありますか? List オブジェクトをシリアル化しようとすると、機能しません。
私のシナリオは次のようなものです。Bean は自動生成され、さまざまなモジュールが Bean に基づいて XML/JSON データを生成するため、XML 注釈を使用する必要があります - 私が持っているものの例 -
インターフェイス A、抽象クラス B は A を実装し、多くの Bean は B から派生しています。Bean クラス C があり、
@XmlJavaTypeAdapter(A.class, AAdapter.class)
クラスC {
String type;
List<B> listOfBeans;
}
クラス AAdapter は XmlAdapter を拡張します{
@Override
public Object marshal(A a)
throws Exception {
if (a == null) {
return null;
}
if (a.isItDerivedFromB()) {
return a;
} else {
return otherAdapter.getInstance().marshal(()a);
}
}
}
C のオブジェクトをシリアル化しようとすると、有効なオブジェクトがすべて含まれているにもかかわらず、リストの出力が常に空になります。リスト オブジェクト B のシリアライザー (unknownSerializer を呼び出す) が見つからないようです。
{ "listOfBeans" : [ { }, { } ], "type" : "holderForListOfBeans" }
私のオブジェクトマッパーは-
private ObjectMapper initializeJackson() {
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat(TWS_DATE_FORMAT));
mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.setSerializationInclusion(Include.NON_NULL);
// Need to use JaxB Annotation.
JaxbAnnotationModule module = new JaxbAnnotationModule();
mapper.registerModule(module);
// All 64 bit fields should be quoted. Use StringSerializer for them.
SimpleModule mySimpleModule = new SimpleModule();
mySimpleModule.addSerializer(Long.class, new ToStringSerializer());
mySimpleModule.addSerializer(Double.class, new ToStringSerializer());
mapper.registerModule(mySimpleModule);
return mapper;
}