2017年10月22日(星期天)  农历:丁酉年九月初三
  • 首页
  • JAVA
  • 通过反射封装javabean为json对象

作者:MaskedMen分类: JAVA 标签: 反射封装 javabean json java

DFPEF6OYXH5]VNELC]D%}LU.pngpackage maskedmen.uitils.classparameterstojson;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author MaskedMen
 *将类转换成JSON对象,即封装类的属性
 *因为本工具类很大程度上破坏了类的封装特性
 *因此,使用时请小心谨慎,必要时做适当的修改
 */
public class ClassParametersToJson {

 
 public static void main(String[] args) {
  
  TestClass testClass = new TestClass("土豆儿","西瓜");
  try {
   classParametersToJson(testClass);
  } catch (Exception e) {
  
   e.printStackTrace();
  }
 }
 
 public static void classParametersToJson(Object object) throws Exception{
  
  Class<?> clazz = object.getClass();//获取class对象
  String paramName=null;//参数名
  String paramType=null;//参数类型
  String methodName = null;//方法名
  Method method=null;
  Object value=null;
  int count=0;//记录循环次数
  int length=0;
  
  StringBuffer jsonbf = new StringBuffer();
  StringBuffer parambf = new StringBuffer();
  
  Field[] parameters = clazz.getDeclaredFields();//获取类的参数数组
  length = parameters.length;
  
  jsonbf.append("{");
  for (Field parameter:parameters) {//foreach循环
   paramName = parameter.getName();//获取参数名
   paramType = parameter.getType().toString();//获取参数类型
   if(!paramType.equals("boolean")){//出来非boolean类型
    
    
    if(count>=1&&count<length){
     jsonbf.append(",");
    }
    
    jsonbf.append("\""+paramName+"\"");
   
    //将首字母大写并连接上get
    methodName = parambf.append("get").append(paramName.substring(0, 1).toUpperCase())
       .append(paramName.substring(1)).toString();
     
     method = clazz.getDeclaredMethod(methodName, new Class[]{});//根据方法名获取对应的方法
    if(!method.isAccessible()){//如果为私有属性
     method.setAccessible(true);//设置为可见
    }
    value = method.invoke(object, new Object[]{});//执行对应的get方法
    value=value.toString();
    jsonbf.append(":");
    jsonbf.append("\""+value+"\"");
    count++;
    parambf.delete(0, parambf.length());//每循环一次都进行清空
    
   }else {
    System.out.println("boolean类型不处理");
   }
  }
  
  jsonbf.append("}");
  
  System.out.println("JSON字符串"+jsonbf.toString());
 }
}


//测试类
class TestClass{
 
 private String  potato;//土豆
 private String  watermelon;//西瓜
 
 public TestClass() {
  
 }
 
 public TestClass(String potato, String watermelon) {
  super();
  this.potato = potato;
  this.watermelon = watermelon;
 }

 public String getPotato() {
  return potato;
 }

 public void setPotato(String potato) {
  this.potato = potato;
 }

 public String getWatermelon() {
  return watermelon;
 }

 public void setWatermelon(String watermelon) {
  this.watermelon = watermelon;
 }
 
 
 
}


源码下载地址:http://pan.baidu.com/s/1geAGaLP

java源码大小:5KB | 来源:百度网盘
已经过安全软件检测无毒,请您放心下载。
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

已有 3/6118 人参与

评论:

b-lv.com 2016-04-21 09:29
大哥、能不能好心写点注释啊~!
MaskedMen 2016-04-21 09:38
@b-lv.com:下次我写的时候,给些注释。不好意思哈,这个你要注释的话,把qq邮箱给我,我注释号了,给你发来。或者进qq群316278345 找群主。
赖胖子博客 2016-04-21 09:51
@MaskedMen:你也可以加群273404013

发表评论:



手Q扫描加入Java初学者群