在写代码的时候我们经常会需要打印出一些重要的对象信息,但是我们又不可能每一个都用字符串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));

 

posted on 2017-11-24 14:55  月亮之城  阅读(199)  评论(0编辑  收藏  举报