使用反射获取字段注解、字段值
public class TestBo implements Serializable, Cloneable {
@Remark("名称")
private String name;
@Remark("年龄")
private String age;
}
/**
* 参数验证,提取@Remark.value
*
* @param obj obj
* @return 抽取字段,用','隔开
*/
private static String extractFields(Object obj) {
Class<?> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
if (declaredFields.length == 0) {
throw new RuntimeException("空对象");
}
StringBuilder fieldsSb = new StringBuilder();
Class<Remark> remarkClass = Remark.class;
for (Field field : declaredFields) {
field.setAccessible(true);
boolean annotationPresent = field.isAnnotationPresent(remarkClass);
if (!annotationPresent) {
throw new RuntimeException(field + "字段缺少@Remark注解");
}
Object fieldValue;
try {
fieldValue = field.get(obj);
} catch (IllegalAccessException e) {
throw new RuntimeException(field + "获取字段值异常");
}
fieldsSb.append(field.getAnnotation(remarkClass).value()).append(":").append(fieldValue).append(",");
}
return fieldsSb.toString().substring(0, fieldsSb.length() - 1);
}
网友评论