1、代码
public static boolean hasFieldInEntityOrInnerClass(Object obj, String fieldName) {
Class<?> clazz = obj.getClass();
return hasFieldInClass(clazz, fieldName);
}
private static boolean hasFieldInClass(Class<?> clazz, String fieldName) {
for (Field field : clazz.getDeclaredFields()) {
if (field.getName().equals(fieldName)) {
return true;
}
}
Class<?>[] innerClasses = clazz.getDeclaredClasses();
for (Class<?> innerClass : innerClasses) {
if (hasFieldInClass(innerClass, fieldName)) {
return true;
}
}
if (clazz.getSuperclass() != null) {
return hasFieldInClass(clazz.getSuperclass(), fieldName);
}
return false;
}
public static Object getFieldValueInEntityOrInnerClass(Object obj, String fieldName) throws IllegalAccessException {
Class<?> clazz = obj.getClass();
return getFieldValueInClass(clazz, obj, fieldName);
}
private static Object getFieldValueInClass(Class<?> clazz, Object obj, String fieldName) throws IllegalAccessException {
for (Field field : clazz.getDeclaredFields()) {
if (field.getName().equals(fieldName)) {
field.setAccessible(true);
return field.get(obj);
}
if (field.getType().isMemberClass() && field.getType().getDeclaredFields().length > 0) {
field.setAccessible(true);
Object fieldValue = field.get(obj);
if (fieldValue != null) {
return getFieldValueInClass(field.getType(), fieldValue, fieldName);
}
}
}
Class<?>[] innerClasses = clazz.getDeclaredClasses();
for (Class<?> innerClass : innerClasses) {
if (obj instanceof Collection) {
for (Object element : (Collection<?>) obj) {
if (innerClass.isInstance(element)) {
return getFieldValueInClass(innerClass, element, fieldName);
}
}
} else if (innerClass.isInstance(obj)) {
return getFieldValueInClass(innerClass, obj, fieldName);
}
}
if (clazz.getSuperclass() != null) {
return getFieldValueInClass(clazz.getSuperclass(), obj, fieldName);
}
return null;
}
2、调用
public <T> InputMsgReq buildInputMsgReq(T req, Class<T> reqClazz, String traNum) throws IOException,JeecgBootException {
boolean hasPsnNo = hasFieldInEntityOrInnerClass(req, "psn_no");
if (hasPsnNo) {
Object psnNoValue = getFieldValueInEntityOrInnerClass(req, "psn_no");
} else {
}
return inputMsgReq;
}