今天提供接口,发现协议设定上有需要将json数组转换为List的设计!避免大家踩坑,故总结一下两种方式!
json数组大概为这种格式:
jsonString=[{"id": "123","name": "李四",}, {"id": "6666","name": "李五",}]
一、介绍
两种方式都是依赖的ObjectMapper类!
ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。
第一种方式:
public void testConvert() {
final ObjectMapper mapper = new ObjectMapper();
jsonString=[{"id": "123","name": "李四",}, {"id": "6666","name": "李五",}];
JavaType collectionType = getCollectionType(mapper, List.class, DtoBean.class);
List<DtoBean> lst = (List<DtoBean>)mapper.readValue(jsonString, collectionType);
}
/**
* 获取泛型的Collection Type
* @param collectionClass 泛型的Collection
* @param elementClasses 实体bean
* @return JavaType Java类型
*/
public static JavaType getCollectionType(ObjectMapper mapper,Class<?> collectionClass, Class<?>... elementClasses) {
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
但是这种方式的 constructParametricType()方法为过时方法,所以不建议再继续使用!
第二种方式:
public void testConvert() {
final ObjectMapper mapper = new ObjectMapper();
jsonString=[{"id": "123","name": "李四",}, {"id": "6666","name": "李五",}];
List<DtoBean> listll = mapper.readValue(jsonString, new TypeReference<List<DtoBean>>(){});
}
第二种方式不仅未过时,而且使用起来较简洁!