【发布时间】:2012-10-26 13:51:38
【问题描述】:
我有以下问题。
我必须将一个 json 请求解析为一个包含泛型类型字段的对象。
编辑
我已经使用常规类类型进行了一些测试(所以我在用泛型替换它之前让它工作)。现在解析单个元素效果很好。
问题是当我需要从该类中解析出一个列表对象时。
所以我必须以某种方式通知杰克逊,我的 T 是 list 类型,而不仅仅是 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);
}
}
【问题讨论】:
标签: java json parsing generics jackson