/**
* 根据swagger ApiModelProperty 注解类的 example 实例化 实体
* @param clazz 实体类
* @param <T> 返回实例化的数据
* @return 返回实例化的数据
*/
public static <T> T mockExampleModel(Class<T> clazz){
try {
T resultT = clazz.newInstance();
Map<String,Object> exampleFieldMap = new HashMap<>();
Field[] fields = clazz.getDeclaredFields();//获取所有的属性 包括公有和私有
for (Field field : fields){
//获取 ApiModelProperty 注解
ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class);
if(apiModelProperty != null){
//获取 ApiModelProperty 注解下的 example值
String example = apiModelProperty.example();
if( !example.equals("")){
exampleFieldMap.put(field.getName(),example);
}
}
}
return map2Bean(clazz,exampleFieldMap);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据 传入的map与类名,通过反射实例化对象
* @param clazz 需要实例化的类
* @param map 包含属性的键值对 (String,Object)
* @return 实例化成功的对象
*/
public static <T> T map2Bean(Class<T> clazz, Map<String,Object> map){
T obj=null;
try {
//根据类名实例化对象
obj=clazz.newInstance();
for(String key :map.keySet()){
if(key!=null&&!"".equals(key)){
//将属性首字符大写
Character c=key.charAt(0);
c=Character.toUpperCase(c);
String temp=String.valueOf(c);
if(key.length()>1)
temp+=key.substring(1);
Method methods[]=obj.getClass().getMethods();
for(int i=0;i<methods.length;++i){
//判断方法名是否匹配
if(methods[i].getName().equal("set"+temp))
{
//执行方法,传入值
methods[i].invoke(obj, map.get(key));
break;
}
}
}
}
// Method method=obj.getClass().getMethod("toString");
// method.invoke(obj, null);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return obj;
}
参考文章:
https://www.jianshu.com/p/9be58ee20dee