jacksonはjsonをList汎用型に変換

1204 ワード

次は一般的な書き方の例ですが、一般的ではありません.
//    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)