java的method反射机制(一)
在做java web开发中,我们常常会遇到前台从后台获取特定的数据格式,特别是Extjs开发,json-lib-2.2.2-jdk15.jar这个jar包帮我们解决了不少问题,但是不是特别全,所以有时候需要自己去将数据拼成所想要的格式,对此,我们可以参照json-lib-2.2.2-jdk15.jar(反编译),可以自己去封装一个jar包,对于这个问题,我们可以利用java所提供的Method反射机制来解决
如下示例:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.apache.commons.lang.StringUtils;
public class MethodReflect {
public static void main(String[] args){
Text text = new Text();
try {
StringBuffer ap = new StringBuffer();
String str = Exttools(text);
ap.append("{msg:'{");
ap.append(str);
ap.append("}',success:true}");//获取自己想要的数据格式
} catch (Exception e) {
e.printStackTrace();
}
}
public static String Exttools(Object obj)throws Exception{
StringBuffer ap = new StringBuffer();
Field[] fields = obj.getClass().getDeclaredFields();//获取对象属性
for (Field field : fields) {
ap.append("\""+field.getName()+"\":");
String md = "get"+StringUtils.capitalize(field.getName());//获取get方法
Method method = obj.getClass().getMethod(md);
Class r = method.getReturnType(); //获取属性类型
if("java.lang.String".equals(r.getName())){
String value = (String)method.invoke(obj);
ap.append("\""+value+"\",");
}else if("java.lang.Integer".equals(r.getName())){
Integer value = (Integer)method.invoke(obj);
ap.append("\"0\",");
}//else if("")//添加其它的数据类型
}
String a = ap.substring(0, ap.length()-1);
return a;
}
}