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
main 方法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; } }
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=[
en[email protected],
[email protected]
],
strs=[
a,
b,
c
],
file=d: \test.txt,
[email protected]
}
},
{
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=[
[email protected],
[email protected]
],
strs=[
a,
b,
c
],
file=d: \test.txt,
[email protected]
}
}
],
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=[
[email protected],
[email protected]
],
strs=[
a,
b,
c
],
file=d: \test.txt,
[email protected]
}
}
}
相關推薦
entity pojo vo 轉換為 string 或 json
如題 entity pojo vo 轉換為 string 或 json 這個是我在程式碼中 要 記錄 日誌 , 我們 用的是hibernate 所以 關聯 的表 巢狀的表 和多 ,層次 也很深 。 用 其他的 一些 轉換 成 string 的 方法
java讀取json檔案並轉換為String
import java.io.*; public class Output { //測試 public static void main(String[] args){ String json = "null"; try { json = readJsonData("I
js將某個值轉換為String字串型別或轉換為Number數字型別
將某個值轉換為String型別 1. value.toString() toString()方法返回一個表示該物件的字串 var a = 123 a.toString() // '123' 2. "" + value 一元加法運算子的作用是數值求和,或者字串拼接。有字串,則是字串拼接。其他是數字相加求和
C# 將 HTML 轉換為圖片或 PDF
ont gif completed 字段 sed pad cli 滾動條 lose 首先是把 HTML 轉換為圖片。 public partial class Form1 : Form { public Form1() {
SpringMVC表單中post請求轉換為put或delete請求
hidden delet path web 需要 轉化 value 參數 text 1.在web.xml文件中配置 1 <!-- HiddenHttpMethodFilter過濾器可以將POST請求轉化為put請求和delete請求! -->
InputStream轉換為String, byte[] data = new byte[1024]詳解
() gpo ring copyright create import number rgs write /** * This file created at 2018年2月28日. * * Copyright (c) 2002-2018 Bingosoft, In
python 陣列轉換為string
先看下join函式: 語法為: str.join(sequence) sequence -- 要連線的元素序列 例項一:連線字串 str1 = '-' seq = ("a", "b", "c") print str1.join(seq) 例項二:連線陣列(陣列元素為字串
【C++】int轉換為string的兩種方法(to_string、字串流)轉載
int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉int,long,以及long lo
X++: 將查詢結果轉換為通用的JSON物件
public static FreeStyle.D365Tools.GMap getCursorValues(Common _table,Map pvSchema) { FreeStyle.D365Tools.GMap lvMap=FreeStyle.D365Tool
solidity智慧合約[14]-動態位元組陣列轉換為string
動態位元組陣列轉換為string 動態位元組陣列可以通過string(name)非常直接的轉換為string型別,下面為例子: 1234567891011121314 pragma solidity ^0.4.23;contract dynamicTostring{ &
如何讓byte陣列轉換為String字串時候去除亂碼的問號
1. 加入這家公司一直跟通訊層打交道 天天使用byte陣列傳遞資料 好懷念 使用http協議 傳資料 至少人家 okttp 或者retrofit幫你封裝好了 現在 天天是十進位制轉換為16進位制,byte 陣列轉換成short,int ,String
js資料型別強制轉換--轉換為String
強制型別轉換 -指的是將一個數據型別轉換為其他資料型別 -型別轉換主要是指,將其他的資料型別,轉換為 St
c++可以把任意基本型別轉換為string, 類似於c 語言中的 sprintf函式
//c++中按照格式輸入輸出 類似於c 語言中的 sprintf函式 #include<iostream> #include<sstream>//std::stringstream 標頭檔案 int main() { std::string str = "高海文"
Java將一個基本資料型別轉換為String的方法及效率比較
把一個基本資料型別轉為字串型別,有三種方法。 假設a是integer型別的資料 方法1:a.toString(); 方法2:String.valueOf(a); 方法3:a+""; 效率比較: 方法1效率最快、其次到方法2、最後才是方法3; 原因: 1.a
Object型別轉換為String型別
1. Object.toString() 1 obj.toString()
java wxpay簽名,map轉換為String
在完成wxpay開發時,需通過MD5簽名,生成sign。 在此過程中,需對map中的key按照ASCII碼值順序進行排序,程式碼如下: package com.yzq.te; import java.util.Iterator;import java.util.Map;import java.util.
byte陣列轉換為String字串
平時經常會使用Bytes.toString(byte[] b)這種方法,但是這個是Hbase自帶的Bytes工具類,一旦離開Hbase的依賴那麼只能自己寫個工具類來轉換了,於是乎想到將Hbase的Bytes中部分方法提出來寫成自己的工具類,畢竟大牛寫的程式碼還是很信賴的,於是就產生了下面的工具類:public
java JSONObject轉換為String格式
在使用微信支付時,需將從前臺接收的JSONObeject 格式資料轉換為String型別,其具體的轉換過程如下: JSONObject jsonObject = JSONObject.parseObject(XmltoJsonUtil.xml2JSON(content)); JSONObje
java xml轉換為String
public class XmltoJsonUtil { public static String xml2JSON(String xml) { JSONObject obj = new JSONObject(); try { InputStream is = new ByteArrayInputStream
把byte[]轉換為String
/* * 此方法將藍芽通訊返回的位元組轉換為字串 */ public static String bytesToString(byte[] bytes) {