下面是一个常用写法示例,但是不通用:
// 返回 List<User>
return mapper.readValue(jsonString, new TypeReference<List<User>>() {});
如果需要将上述方法抽象为一个公共的方法,常规来说需要传入 TypeReference 实例对象,比较麻烦。
下面给出的代码方法,可以实现通用。
将其抽象为通用方法代码为:
/**
* json字符串转成list
*
* @param jsonString
* @param cls
* @return
*/
public static <T> List<T> jsonToList(@NonNull String jsonString, Class<T> cls) {
try {
return mapper.readValue(jsonString, getCollectionType(List.class, cls));
} catch (JsonProcessingException e) {
String className = cls.getSimpleName();
log.error(" parse json [{}] to class [{}] error:{}", jsonString, className, e);
}
return null;
}
/**
* 获取泛型的Collection Type
*
* @param collectionClass 泛型的Collection
* @param elementClasses 实体bean
* @return JavaType Java类型
*/
private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
使用方法:
List<User> list = jsonToList(jsonString, User.class);
(END)