package com.denkou.project.service.zxzy.utils;
import com.denkou.project.service.zxzy.exception.ApiException;
import io.swagger.annotations.ApiModelProperty;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Create By denkou
* 特定处理通用反射类
*
* @Date 8/4/2022 7:59 PM
*/
@Slf4j
public class ReflectUtils {
/**
*
* @param k 实体类
* @param p 实体类对应数据
* @param result 返回组合
*/
@SneakyThrows
public static void getValues(Object k, Object p, Map<String, List<Object>> result) {
Field[] fields = k.getClass().getDeclaredFields();//包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段
for (Field field : fields) {
field.setAccessible(true);
if (field.getName().equals("serialVersionUID") || field.getName().equals("platformId")) {
continue;
}
try {
String key = field.getName();
Object value = field.get(p);
//不同场合对list进行不同的操作
List<Object> list;
if (result.containsKey(key)) {
list = result.get(key);
} else {
list = new ArrayList<>();
}
if (!list.contains(value)) {
list.add(value);
}
result.put(key, list);
if (field.isAnnotationPresent(ApiModelProperty.class)) {
ApiModelProperty annotation = field.getAnnotation(ApiModelProperty.class);
String keyName = key + "name";
String chinesName = annotation.value();
//不同场合对list进行不同的操作
List<Object> tittleList;
if (result.containsKey(keyName)) {
tittleList = result.get(keyName);
} else {
tittleList = new ArrayList<>();
}
if (!tittleList.contains(chinesName)) {
tittleList.add(chinesName);
}
result.put(keyName, tittleList);
}
} catch (IllegalArgumentException e) {
throw new ApiException("发生未知异常");
} catch (IllegalAccessException e) {
throw new ApiException("发生未知异常");
}
}
}
}