fieldToDictMap格式:
// 定义字段和字典类型的映射关系
Map<String, String> fieldToDictMap = new HashMap<>();
fieldToDictMap.put("one", "字典标识符");
fieldToDictMap.put("two", "字典标识符");
systemClient是用来获取字典数据的,根据自己实际情况来
type,是因为我写的通用的批量转化,但是个别字段是需要额外做处理的
public static void getWordGetSet(List<?> wordList, Map<String, String> fieldToDictMap,SystemClient systemClient,String type) {
Map<String, Map<String, String>> allDictionaries = new HashMap<>();
for (Map.Entry<String, String> entry : fieldToDictMap.entrySet()) {
String fieldName = entry.getValue();
SysDictItem dictItemQuery = new SysDictItem();
dictItemQuery.setNbbsf(fieldName);
Result<List<SysDictItem>> result = systemClient.getDictItem(dictItemQuery);
// 防止空结果
if (result != null && result.getData() != null) {
Map<String, String> dictMap = result.getData().stream()
.filter(Objects::nonNull)
.collect(Collectors.toMap(SysDictItem::getXxdm, SysDictItem::getXxdmmc));
allDictionaries.put(fieldName, dictMap);
}
}
for (Object word : wordList) {
for (Map.Entry<String, String> entry : fieldToDictMap.entrySet()) {
String fieldName = entry.getKey();
String dictType = entry.getValue();
Map<String, String> dictMap = allDictionaries.get(dictType);
// 动态调用 getter 和 setter 方法
if (dictMap != null) {
try {
// 获取字段值
Method getter = word.getClass().getMethod("get" + capitalize(fieldName));
Object fieldValue = getter.invoke(word);
if (fieldValue != null) {
// 设置转换后的值
Method setter = word.getClass().getMethod("set" + capitalize(fieldName), String.class);
setter.invoke(word, dictMap.getOrDefault(fieldValue.toString(), "未知"));
}
} catch (Exception e) {
// 捕获异常并记录日志
log.error("getter或setter方法调用失败,请检查字段名是否正确,例如:get" + capitalize(fieldName));
e.printStackTrace();
}
}
}
switch (type)
{
case "zdrygkjl":
getWordGetSetZdryGkjl(word);
break;
case "zdry":
getWordGetSetZdry(word);
break;
}
}
}
public static <T> void getWordGetSetZdryGkjl(T word){
// 通过反射机制来判断是否存在类似jzdpcsmc的属性,并进行处理(更通用但性能有一定损耗的方式)
try {
// 获取名为jzdpcsmc的get方法
java.lang.reflect.Method getMethod = word.getClass().getMethod("getGxdwmc");
if (getMethod.getReturnType() == String.class) {
String value = (String) getMethod.invoke(word);
if (value!= null) {
// 获取对应的set方法
java.lang.reflect.Method setMethod = word.getClass().getMethod("setGxdwmc", String.class);
// 调用CacheUtils.getGajgmc处理值并设置回去
setMethod.invoke(word, CacheUtils.getGajgmc(value));
}
}
java.lang.reflect.Method getMethodZkzt = word.getClass().getMethod("getZkztmc");
if (getMethodZkzt.getReturnType() == String.class) {
String value = (String) getMethodZkzt.invoke(word);
if (value!= null) {
// 获取对应的set方法
java.lang.reflect.Method setMethod = word.getClass().getMethod("setZkztmc", String.class);
// 调用CacheUtils.getGajgmc处理值并设置回去
if("2".equals(value)){
setMethod.invoke(word, "在");
}else{
setMethod.invoke(word, "不在");
}
}
}
} catch (Exception e) {
// 处理反射调用可能出现的异常,比如方法不存在等情况,可以根据实际需求更精细地处理异常
e.printStackTrace();
}
}
public static <T> void getWordGetSetZdry(T word){
// 通过反射机制来判断是否存在类似jzdpcsmc的属性,并进行处理(更通用但性能有一定损耗的方式)
try {
// 获取名为jzdpcsmc的get方法
java.lang.reflect.Method getMethod = word.getClass().getMethod("getJzdpcsmc");
if (getMethod.getReturnType() == String.class) {
String value = (String) getMethod.invoke(word);
if (value!= null) {
// 获取对应的set方法
java.lang.reflect.Method setMethod = word.getClass().getMethod("setJzdpcsmc", String.class);
// 调用CacheUtils.getGajgmc处理值并设置回去
setMethod.invoke(word, CacheUtils.getGajgmc(value));
}
}
java.lang.reflect.Method getMethodGxdw = word.getClass().getMethod("getGxdwmc");
if (getMethodGxdw.getReturnType() == String.class) {
String value = (String) getMethodGxdw.invoke(word);
if (value!= null) {
// 获取对应的set方法
java.lang.reflect.Method setMethod = word.getClass().getMethod("setGxdwmc", String.class);
// 调用CacheUtils.getGajgmc处理值并设置回去
setMethod.invoke(word, CacheUtils.getGajgmc(value));
}
}
} catch (Exception e) {
// 处理反射调用可能出现的异常,比如方法不存在等情况,可以根据实际需求更精细地处理异常
e.printStackTrace();
}
}
/**
* 首字母大写辅助方法
*/
private static String capitalize(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}