在工作中,难免会通过反射去获得对象某个属性的值,从而进行下一步的操作。如下反射工具实现了这样的功能。
方法一:通过对象反射获取
package com.bijian.test; import java.lang.reflect.Field; /** * 反射获取对象属性值工具类 */ public class ParamsReflectUtil { public static Object getFieldValue(Object obj, String field) { Class<?> claz = obj.getClass(); Field f = null; Object fieldValue = null; try { Field[] fields = claz.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { if (fields[i].getName().equals(field)) { f = claz.getDeclaredField(field); f.setAccessible(true); fieldValue = f.get(obj); } } } catch (Exception e) { System.out.println(e.getStackTrace()); } return fieldValue; } }
调用实例:
String custNo = (String) ParamsReflectUtil.getFieldValue(request.getData(), "custNo");
如果这里的request.getData()是一个json串,或者进一步,request.getData()是一个通用的json串,无法(或者穷举会比较多)一一将它映射成java对象,我们可以用json工具来获得,如下方法所示。
方法二:通过Json工具获得
import java.util.Map; import java.util.TreeMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * 属性(对象)值反射获取工具类 */ public class ParamsReflectUtil { private final static Logger logger = LoggerFactory.getLogger(ParamsReflectUtil.class); public static Object getFieldValue(String jsonStr, String field) { JSONObject jsonObject = JSON.parseObject(jsonStr); Object fieldValue = null; for (Iterator iter = jsonObject.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); if(name.equals(field)) { fieldValue = jsonObject.get(name); } } return fieldValue; } }
调用实例:
String custNo = (String) ParamsReflectUtil.getFieldValue(request.getData(), "custNo");
参考资料:http://blog.csdn.net/starryninglong/article/details/60468440