This commit is contained in:
牛子源 2025-05-22 13:14:05 +08:00
parent 48bc1c13fb
commit 0cdd9d4d94
1 changed files with 29 additions and 12 deletions

View File

@ -5,38 +5,54 @@ import com.syjiaer.clinic.server.common.api.annotations.IMField;
import com.syjiaer.clinic.server.common.exception.MessageException; import com.syjiaer.clinic.server.common.exception.MessageException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public abstract class BaseInputModel { public abstract class BaseInputModel {
public Map<String, Object> buildToMap() { public Map<String, Object> buildToMap() {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 遍历所有字段包含父类
Class<?> clazz = this.getClass(); Class<?> clazz = this.getClass();
while (clazz != null) { while (clazz != null) {
for (Field field : clazz.getDeclaredFields()) { for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true); field.setAccessible(true);
try { try {
Object value = field.get(this); // 检查RequiredField注解 Object value = field.get(this);
String mapKey = null; String mapKey = null;
if (field.isAnnotationPresent(IMField.class)) { if (field.isAnnotationPresent(IMField.class)) {
IMField annotation = field.getAnnotation(IMField.class); IMField annotation = field.getAnnotation(IMField.class);
mapKey = annotation.key(); mapKey = annotation.key();
if (annotation.required()) {
if (value == null || value.toString().isEmpty()) { if (annotation.required() && (value == null || (value instanceof String && ((String) value).isEmpty()))) {
throw new MessageException("[" + annotation.key() + ":"+annotation.name()+"]不能为空"); throw new MessageException("[" + annotation.key() + ":" + annotation.name() + "] 不能为空");
}
} }
} }
if (value != null && mapKey != null && !value.toString().isEmpty()){ if (mapKey != null) {
map.put(mapKey, field.get(this)); // 处理 BaseInputModel 子类
if (value instanceof BaseInputModel) {
map.put(mapKey, ((BaseInputModel) value).buildToMap());
}
// 处理 List<BaseInputModel>
else if (value instanceof List) {
List<?> list = (List<?>) value;
List<Map<String, Object>> mappedList = new ArrayList<>();
for (Object item : list) {
if (item instanceof BaseInputModel) {
mappedList.add(((BaseInputModel) item).buildToMap());
} else {
mappedList.add((Map<String, Object>) item); // 假设基本类型已为 Map
}
}
map.put(mapKey, mappedList);
}
// 其他非空值直接放入
else if (value != null && !(value instanceof String || value.toString().isEmpty())) {
map.put(mapKey, value);
}
} }
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -45,4 +61,5 @@ public abstract class BaseInputModel {
} }
return map; return map;
} }
} }