次の問題があります。
ジェネリック型フィールドを含むオブジェクトに json リクエストを解析する必要があります。
編集
通常のクラス型を使用していくつかのテストを行いました (そのため、ジェネリックに置き換える前に動作させます)。単一の要素の解析がうまく機能するようになりました。
問題は、そのクラスからリスト オブジェクトを解析する必要がある場合です。
したがって、T が AlbumModel だけでなくリスト型であることをジャクソンに何らかの方法で通知する必要があります。
これが私が試したことです。
@Override
public ListResponseModel<AlbumModel> parse(String responseBody) throws Exception {
JavaType type = mapper.getTypeFactory().constructParametricType(ResponseModel.class,
AlbumModel.class);
return mapper.readValue(responseBody,
mapper.getTypeFactory().constructParametricType(ResponseModel.class, type));
}
しかし、上記のコードは機能しません。このようなものの解決策は何ですか?
ListResponseModel の私のジェネリック型は次のように定義されています。List<T> data
次のように成功しました:
public class BaseResponseModel<T> {
@JsonProperty("data")
private T data;
@JsonProperty("paginations")
private PaginationModel pagination;
}
これまでのところ、次のコードがありますが、常にハッシュに解析されます。
public class ResponseParser extends BaseJacksonMapperResponseParser<ResponseModel<AlbumModel>> {
public static final String TAG = ResponseParser.class.getSimpleName();
@Override
public ResponseModel<AlbumModel> parse(String responseBody) throws Exception {
return mapper.readValue(responseBody,
mapper.getTypeFactory().constructParametricType(ResponseModel.class, AlbumModel.class));
}
}
public abstract class BaseJacksonMapperResponseParser<T> implements HttpResponseParser<T> {
public static final String TAG = BaseJacksonMapperResponseParser.class.getSimpleName();
public static ObjectMapper mapper = new ObjectMapper();
static {
mapper.disable(Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
}
}