jacksonはjsonをList汎用型に変換
1204 ワード
次は一般的な書き方の例ですが、一般的ではありません.
上記の方法を共通の方法として抽象化する必要がある場合、通常はTypeReferenceインスタンスオブジェクトに転送する必要があり、面倒です.以下に示すコードメソッドは,汎用を実現できる.
一般的なメソッドコードとして抽象化:
使用方法:
(END)
// List
return mapper.readValue(jsonString, new TypeReference>() {});
上記の方法を共通の方法として抽象化する必要がある場合、通常はTypeReferenceインスタンスオブジェクトに転送する必要があり、面倒です.以下に示すコードメソッドは,汎用を実現できる.
一般的なメソッドコードとして抽象化:
/**
* json list
*
* @param jsonString
* @param cls
* @return
*/
public static List jsonToList(@NonNull String jsonString, Class 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 list = jsonToList(jsonString, User.class);
(END)