在写代码的时候我们经常会需要打印出一些重要的对象信息,但是我们又不可能每一个都用字符串append,所以这个工具类很有必要的,参数就是任何一个对象,输出就是其所有属性以及父类中的属性都要打印出来
1 package com.ninefbank.smallpay.clear.util; 2 3 import java.lang.reflect.Field; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.HashMap; 7 import java.util.Map; 8 9 import org.slf4j.Logger; 10 import org.slf4j.LoggerFactory; 11 12 import com.ninefbank.smallpay.clear.constant.ClearConstants; 13 14 /** 15 * 反射工具类 16 * 17 */ 18 public class ReflectUtil { 19 20 private static Logger logger = LoggerFactory.getLogger(ReflectUtil.class); 21 22 /** 23 * 获取当前对象以及对象父类的属性和属性值 24 * @return 25 * 26 */ 27 public static Map<String, Object> getCurrAndParentFields(Object paramObject){ 28 29 if(paramObject == null) return null; 30 31 Map<String, Object> paramsMap = new HashMap<String, Object>(); 32 Class<? extends Object> paramClass = paramObject.getClass(); 33 Field[] fields = paramClass.getDeclaredFields(); 34 for (Field field : fields) { 35 try { 36 field.setAccessible(true); 37 if(field.get(paramObject) instanceof Date){ 38 paramsMap.put(field.getName(), new SimpleDateFormat(ClearConstants.DATE_FORMAT_DEFAULT).format(field.get(paramObject))); 39 }else{ 40 paramsMap.put(field.getName(),field.get(paramObject)); 41 } 42 Class<?> paramsSuperclass = paramClass.getSuperclass(); 43 Field[] declaredFields = paramsSuperclass.getDeclaredFields(); 44 for (Field superField : declaredFields) { 45 superField.setAccessible(true); 46 if(superField.get(paramObject) instanceof Date){ 47 paramsMap.put(superField.getName(), new SimpleDateFormat(ClearConstants.DATE_FORMAT_DEFAULT).format(superField.get(paramObject))); 48 }else{ 49 paramsMap.put(superField.getName(), superField.get(paramObject)); 50 } 51 52 } 53 } catch (Exception e) { 54 logger.info("反射获取对象以及父类对象参数失败",e); 55 } 56 } 57 return paramsMap; 58 } 59 60 /** 61 * 获取当前对象的属性和属性值 62 * @param paramObject 63 * @return 64 * 65 */ 66 public static Map<String, Object> getCurrFields(Object paramObject){ 67 Map<String, Object> paramsMap = new HashMap<String, Object>(); 68 if(paramObject != null){ 69 Class<? extends Object> paramClass = paramObject.getClass(); 70 Field[] fields = paramClass.getDeclaredFields(); 71 for (Field field : fields) { 72 try { 73 field.setAccessible(true); 74 paramsMap.put(field.getName(),field.get(paramObject)); 75 } catch (Exception e) { 76 logger.info("反射获取当前类的参数失败",e); 77 } 78 } 79 } 80 return paramsMap; 81 } 82 83 }
调用的时候直接像这样就可以了:
logger.info("请求参数:{}", ReflectUtil.getCurrAndParentFields(recordVo));