dev
This commit is contained in:
parent
48bc1c13fb
commit
0cdd9d4d94
|
|
@ -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 (mapKey != null) {
|
||||||
|
// 处理 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value != null && mapKey != null && !value.toString().isEmpty()){
|
|
||||||
map.put(mapKey, field.get(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue