#先上代码
1/** 2 * 解析泛型类型 3 * @param type 4 * @return 5 */ 6public static List<Class<?>> parseGenericType(Type type){ 7 List<Class<?>> rootList = new ArrayList<Class<?>>(); 8 if(type instanceof ParameterizedType){ 9 ParameterizedType pType = (ParameterizedType)type; 10 rootList.add((Class<?>)pType.getRawType()); 11 for(Type at : pType.getActualTypeArguments()){ 12 List<Class<?>> childList = parseGenericType(at); 13 rootList.addAll(childList); 14 } 15 }else{ 16 rootList.add((Class<?>)type); 17 } 18 return rootList; 19} 20 21public static JavaType parseJavaType(ObjectMapper jsonMapper, Type genericParameterType){ 22 List<Class<?>> list = parseGenericType(genericParameterType); 23 if(list==null || list.size()==1){ 24 return jsonMapper.getTypeFactory().constructType(genericParameterType); 25 } 26 Class<?>[] classes = list.toArray(new Class[list.size()]); 27 Class<?>[] paramClasses = new Class[classes.length-1]; 28 System.arraycopy(classes,1,paramClasses,0,paramClasses.length); 29 JavaType javaType = jsonMapper.getTypeFactory().constructParametrizedType(classes[0],classes[0],paramClasses); 30 return javaType; 31}
#使用例子
1JavaType javaType = parseJavaType(objectMapper,method.getGenericReturnType()); 2MyBean bean = objectMapper.readValue(jsonStr, javaType);