entity pojo vo 转换为 string 或 json


如题  

entity  pojo  vo  转换为  string 或 json

这个是我在代码中 要 记录 日志  ,  我们 用的是hibernate 所以 关联 的表  嵌套的表 和多  ,层次 也很深 。

用 其他的 一些 转换 成 string  的 方法 、类, 有时 会出现  死循环 。  由此  写 这个 类。

好了 , 不说了  ,直接代码。


工具类

package com.ly.utils;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
* @ClassName: EntityToString
* @Description: entity  pojo  vo  转换为  string  
* @author linyan
* @date 2017年9月22日 上午11:08:32
*
*/
public class EntityToString {

	//定义基本类型
	static Map<Class<?>, Object> classes = new HashMap<Class<?>, Object>();
	//定义超过此长度截取
	static Integer subStrLength = 200;
	
	static{
		classes.put(byte.class, "");
		classes.put(short.class, "");
		classes.put(int.class, "");
		classes.put(long.class, "");
		classes.put(float.class, "");
		classes.put(double.class, "");
		classes.put(char.class, "");
		classes.put(boolean.class, "");
		classes.put(Byte.class, "");
		classes.put(Short.class, "");
		classes.put(Integer.class, "");
		classes.put(Long.class, "");
		classes.put(Float.class, "");
		classes.put(Double.class, "");
		classes.put(Character.class, "");
		classes.put(Boolean.class, "");
		classes.put(String.class, "");
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o  需要转换的对象
	 * @return
	 */
	public static String getString(Object o) {
		return getString(o,1);
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o  需要转换的对象
	 * @param endLeve  结束 等级 
	 * @return
	 */
	public static String getString(Object o,Integer endLeve ) {
		return getString(o,0,endLeve);
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o		需要转换的对象
	 * @param leve	等级
	 * @param endLeve  结束 等级 
	 * @return
	 */
	public static String getString(Object o,Integer leve,Integer endLeve )    
    {    
		Integer lev = leve + 1;
		Class<?> c = o.getClass();
        String result = "";
        if (leve==0) {
			result+=c.getSimpleName();
		}
		result+= "{";
        // 获取类中的所有定义字段
        Field[] fields = c.getDeclaredFields();    
        //循环遍历字段,获取字段对应的值
        for (Field field : fields)
        {    
            // 如果不为空,设置可见性(也就是设置私有变量可以访问),然后返回    
            field.setAccessible(true);    
            try
            {
            	//有值
            	if(field.get(o) != null){
            		Class<?> fieldClass = field.get(o).getClass();
            		//如果是基本类型 直接 取值   用get直接取
            		if(classes.containsKey(fieldClass)){
            			result += field.getName() + "=" + subStr(field.get(o)) +",";   
            		}else if(field.get( o ) instanceof Iterable ){  // 迭代器  类型的 
            			result += field.getName()+ " = ";
            			result += iterableClass(field.get( o ),leve,endLeve);
            		}else if(field.get( o ) instanceof Map){ //  Map  类型的 
            			result += field.getName( )+ " =  ";
            			result += mapClass(field.get(o), leve, endLeve);
					}else if(fieldClass.isArray()){			// 数组类型
						Object object = field.get(o);
						result += field.getName()+ " = ";
						result += arrayClass(object, leve, endLeve);
					}else { // 其他  类型的 
						/*这个判断是我 自己加的  只对  我现在的项目   有用 
							判断 字段值 的   包名  中 是否 有 entity   并且    现在的层级 不能  大于 结束 层级
							如果有  就是 自己写的类  那么字段的 值 也 要 生成 为 string 类型
						*/
            			if (fieldClass.getCanonicalName().indexOf("entity")>-1&&leve!=endLeve) {
        	                result += field.getName() + "=" + getString(field.get(o),lev,endLeve) +",";    
        				}else { // 这个就是真正的 其他类型了   如  file  等
        	                result += field.getName() + "=" + field.get(o) +",";    
        				}
					}
            	}else {
            		//没有值
            		result += field.getName() + "=" + field.get(o) +",";
				}
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        //去除 最后一个 , 
        if(result.indexOf(",")>=0) result = result.substring(0 , result.length()-1);
        
        return result+"}";    
    }
	
	/**
	 * @Title: iterableClass
	 * @author: linyan
	 * @Description: 迭代器 类型
	 * @param obj
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String iterableClass(Object obj,Integer leve,Integer endLeve){
		String result = "[";
		Iterable<?> ite = (Iterable<?>)obj;
		for (Object object : ite) {
			if(object != null){
				if (classes.containsKey(object.getClass())) {
					result += subStr(object) +",";
				}else if(object instanceof Iterable){
					result += iterableClass(object,leve,endLeve);
				}else if(object instanceof Map){
					result += mapClass(object, leve, endLeve);
				}else if(object.getClass().isArray()){
					result += arrayClass(object, leve, endLeve);
				}else {
					result += elseClass(object,leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "],";
		return result;
	}
	
	/**
	 * @Title: mapClass
	 * @author: linyan
	 * @Description:  Map 类型
	 * @param obj
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String mapClass(Object obj,Integer leve,Integer endLeve){
		String result = "{";
		Map<?,?> map1 = (Map<?,?>)obj;
		for (Map.Entry<?, ?> entry1 : map1.entrySet()) {
			if (entry1.getValue() != null) {
				if (classes.containsKey(entry1.getValue().getClass())) {
					result += entry1.getKey()+"="+  subStr(entry1.getValue())  +",";    
				}else if(entry1.getValue() instanceof Iterable){
					result += entry1.getKey()+ "=" + iterableClass(entry1.getValue(),leve,endLeve);
				}else if(entry1.getValue() instanceof Map){
					result +=  entry1.getKey()+ "=" + mapClass(entry1.getValue(),leve,endLeve);
				}else if(obj.getClass().isArray()){
					result +=  entry1.getKey()+ "=" + arrayClass(entry1.getValue(), leve, endLeve);
				}else {
					result += entry1.getKey()+ "=" + elseClass(entry1.getValue(),leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "},";
		return result;
	}
	
	/**
	 * @Title: arrayClass
	 * @author: linyan
	 * @Description:  数组 类型
	 * @param object
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String arrayClass(Object object,Integer leve,Integer endLeve){
		String result = "[";
		int length = Array.getLength(object) ;
		for (int i = 0; i < length; i++) {
			Object object2 = Array.get(object,i);
			if (object2!=null) {
				if (classes.containsKey(object2.getClass())) {
					result += subStr(object2)+",";
				}else if(object2 instanceof Iterable){
					result += iterableClass(object2,leve,endLeve);
				}else if (object2 instanceof Map) {
					result += mapClass(object2, leve, endLeve);
				}else if (object2.getClass().isArray()) {
					result += arrayClass(object2, leve, endLeve);
				}else {
					result += elseClass(object2,leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "],";
		return result;
	}
	
	/**
	 * @Title: elseClass
	 * @author: linyan
	 * @Description: 其他类型
	 * @param object
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String elseClass(Object object,Integer leve,Integer endLeve){
		String result = "";
		Integer le = leve + 1;
		if (object.getClass().getCanonicalName().indexOf("entity")>-1&&leve!=endLeve) {
    		// 设置字段可见,即可用get方法获取属性值。    
            result += getString(object,le,endLeve) +",";    
		}else {
			// 设置字段可见,即可用get方法获取属性值。    
			result += object+",";
		}
		return result;
	}
	
	
	/**
	 * @Title: subStr
	 * @author: linyan
	 * @Description: 截取字符串
	 * @param object
	 * @return
	 */
	public static String subStr(Object object){
		if (object!=null) {
			if (object.toString().length()>subStrLength) {
				return object.toString().substring(0, subStrLength);
			}else{
				return object.toString();
			}
		}else{
			return "";
		}
	}
	
	
	
}


测试类1

package entity;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @ClassName: Test1
* @Description: 
* @author linyan
* @date 2017年9月26日 上午10:40:46
*
*/
public class Test1 {

	private  String  abc;
	
	private  Integer inte;
	
	private  boolean bool;
	
	private  char  ch;
	
	private  double dou;
	
	private  long lo;

	private  Map<String,Object> map;
	
	private  List<String>  list;
	
	private  Set<Test2> set;
	
	private  String[] strs;
	
	private  File file;
	
	private  Test2 test2;

	public String getAbc() {
		return abc;
	}

	public void setAbc(String abc) {
		this.abc = abc;
	}

	public Integer getInte() {
		return inte;
	}

	public void setInte(Integer inte) {
		this.inte = inte;
	}

	public boolean isBool() {
		return bool;
	}

	public void setBool(boolean bool) {
		this.bool = bool;
	}

	public char getCh() {
		return ch;
	}

	public void setCh(char ch) {
		this.ch = ch;
	}

	public double getDou() {
		return dou;
	}

	public void setDou(double dou) {
		this.dou = dou;
	}

	public long getLo() {
		return lo;
	}

	public void setLo(long lo) {
		this.lo = lo;
	}

	public Map<String, Object> getMap() {
		return map;
	}

	public void setMap(Map<String, Object> map) {
		this.map = map;
	}

	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public Set<Test2> getSet() {
		return set;
	}

	public void setSet(Set<Test2> set) {
		this.set = set;
	}

	public String[] getStrs() {
		return strs;
	}

	public void setStrs(String[] strs) {
		this.strs = strs;
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public Test2 getTest2() {
		return test2;
	}

	public void setTest2(Test2 test2) {
		this.test2 = test2;
	}
	
}


测试类2

package entity;

/**
* @ClassName: Test2
* @Description: 
* @author linyan
* @date 2017年9月26日 上午10:40:53
*
*/
public class Test2 {

	private String a;
	
	private Test1 test1;

	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

	public Test1 getTest1() {
		return test1;
	}

	public void setTest1(Test1 test1) {
		this.test1 = test1;
	}
	
}


main 方法 

public static void main(String[] args) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "gas;ldkf");
		map.put("ex", 45);
		File file = new File("d:/test.txt");
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		String[] strs = new String[3];
		strs = list.toArray(strs);
		Test1 test1 = new Test1();
		test1.setAbc("agcsgdb");
		test1.setBool(false);
		test1.setCh('o');
		test1.setDou(5465.15);
		test1.setFile(file);
		test1.setInte(123456);
		test1.setList(list);
		test1.setLo(987654L);
		test1.setMap(map);
		test1.setStrs(strs);
		Test2 test2 = new Test2();
		test2.setA("aaaaaaaaaaaa");
		test2.setTest1(test1);
		test1.setTest2(test2);
		Set<Test2> set = new HashSet<Test2>();
		set.add(test2);
		Test2 test22 = new Test2();
		test22.setA("bbbbbbbbbbb");
		test22.setTest1(test1);
		set.add(test22);
		test1.setSet(set);
		String entityToString = EntityToString.getString(test1,2);
		System.out.println(entityToString);
	}



输出结果


Test1
{
    abc=agcsgdb,
    inte=123456,
    bool=false,
    ch=o,
    dou=5465.15,
    lo=987654,
    map={
        ex=45,
        name=gas;ldkf
    },
    list=[
        a,
        b,
        c
    ],
    set=[
        {
            a=aaaaaaaaaaaa,
            test1={
                abc=agcsgdb,
                inte=123456,
                bool=false,
                ch=o,
                dou=5465.15,
                lo=987654,
                map={
                    ex=45,
                    name=gas;ldkf
                },
                list=[
                    a,
                    b,
                    c
                ],
                set=[
                    entity.Test2@15db9742,
                    entity.Test2@6d06d69c
                ],
                strs=[
                    a,
                    b,
                    c
                ],
                file=d: \test.txt,
                test2=entity.Test2@15db9742
            }
        },
        {
            a=bbbbbbbbbbb,
            test1={
                abc=agcsgdb,
                inte=123456,
                bool=false,
                ch=o,
                dou=5465.15,
                lo=987654,
                map={
                    ex=45,
                    name=gas;ldkf
                },
                list=[
                    a,
                    b,
                    c
                ],
                set=[
                    entity.Test2@15db9742,
                    entity.Test2@6d06d69c
                ],
                strs=[
                    a,
                    b,
                    c
                ],
                file=d: \test.txt,
                test2=entity.Test2@15db9742
            }
        }
    ],
    strs=[
        a,
        b,
        c
    ],
    file=d: \test.txt,
    test2={
        a=aaaaaaaaaaaa,
        test1={
            abc=agcsgdb,
            inte=123456,
            bool=false,
            ch=o,
            dou=5465.15,
            lo=987654,
            map={
                ex=45,
                name=gas;ldkf
            },
            list=[
                a,
                b,
                c
            ],
            set=[
                entity.Test2@15db9742,
                entity.Test2@6d06d69c
            ],
            strs=[
                a,
                b,
                c
            ],
            file=d: \test.txt,
            test2=entity.Test2@15db9742
        }
    }
}








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值