ジェネリック コレクション タイプごとに異なるシリアライザを使用するように jackson に指示するにはどうすればよいですか。CustomProductsSerializer と CustomClientsSerializer があります
public class ProductsListSerializer extends JsonSerializer<List<Products>>{
// logic to insert __metadata , __count into json
public void serialize(List<Products> value, JsonGenerator jgen, SerializerProvider provider) {
.... .... ....
}
// always returns ArrayList.class
public Class<List<Instrument>> handledType() {
Class c = var.getClass();
return c;
}
}
public class CustomClientsSerializer extends JsonSerializer<List<Clients>>{
// logic to insert __metadata , __count into json
public void serialize(List<Clients> value, JsonGenerator jgen, SerializerProvider provider){
.... .... ....
}
.... .... ....
// always returns ArrayList.class
public Class<List<Clients>> handledType() {
Class c = var.getClass();
return c;
}
}
SimpleModule を使用して両方のシリアライザーを登録しました。問題は、handledType がどちらの場合も ArrayList.class を返すため、以下のクライアントのシリアル化がクラス キャスト例外で失敗することです。
List<Clients> clients;
// code to get clients from database.
String jsonString = mapper.writeValueAsString(clients);
質問は、どのシリアライザーを使用するかをジャクソンに伝える方法ですか?
resteasyでjsonシリアライザーとしてjacksonを使用しています。
-- @ HiJon89 に応じて編集 「リスト」を返すビジネス オブジェクトと、リストを返す別のビジネス オブジェクトがあります。私が必要とする方法は、Busines オブジェクトが「リスト」を返すときに、リスト全体に ProductsListSerializer を使用する必要があることです。Business Object が「List」を返す場合、CustomClientsSerializer を List 全体に使用する必要があります。私のユースケースでは、シリアル化された json に追加の要素を追加します 'eg:__count, __metadata , __references ' Collection ごとに __count は 1 つだけです。Contentusing プロパティでのみ使用できます。助言がありますか ?