通过反射获取类的所有属性值拼接成字符串工具类

public static String objectToString(Object object){
StringBuffer result = new StringBuffer();
try {
// 获得当前类的Class
Class<? extends Object> clazz = object.getClass();
// 获取当前类的全部属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
// 遍历属性得到属性名
String fieldName = field.getName();

         // 如果是用于序列化的直接过滤掉
            if ("serialVersionUID".equals(fieldName)) {
            continue;
            }

            // 判断属性的类型,主要是区分boolean和其他类型
Class<?> type = field.getType();
// boolean的取值是is,其他是get ticket这个类会报错getLLockDetail方法找不到 已修改
String methodName = (type.getTypeName().equals("boolean")?"is":"get")
+ fieldName.substring(0,1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
Method method;
java.lang.Object resultObj;
// 通过方法名得到方法对象
method = clazz.getMethod(methodName);
// 得到这个方法的返回值
resultObj = method.invoke(object);
// 将属性名和它对应的值进行匹配打印 排除两个字段
if (!PRIMARY_KEY.equals(fieldName) && !LASTUPDATE_TIME.equals(fieldName)){
result.append(resultObj).append("|");
}

}
} catch (SecurityException | NoSuchMethodException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
log.error("[objectToString] error, Exception:",e);
}
return result.substring(0,result.length()-1);//去除最后一个|
}
posted @ 2020-04-08 16:54  那光芒很刺眼  阅读(562)  评论(0编辑  收藏  举报