給JavaBean賦默認值並且轉Json字符串的實例
JavaBean賦默認值並轉Json字符串
今日在工作中整理dubbo接口的時候,有些接口參數類型是JavaBean類型的數據,在整理的時候又想直接將JavaBean參數直接以默認的json格式整理,於是想到如何將javaBean的默認值 直接轉換成為 Json格式的數據,避免自己手動去拼寫json字符串。
此段代碼還有值得優化的地方
暫時隻支持Java基本數據類型的轉換,不支持javaBean中包含其他javaBean對象變量的轉換、也不支持List/Map等類型的轉換,後期有空想辦法優化,大傢如果有優化好的代碼也可以拿出來分享
廢話不多說,直接上代碼
package com.up.util.tools; import com.google.gson.Gson; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Created by *** on 2017-3-29 * TIME 11:07. */ public class JavaBeanToJson { public static String toJson(Class clazz) throws Exception { Gson gson = new Gson(); String result = ""; if (clazz.equals(Map.class)) { result = clazz.getName() + "\t" + gson.toJson(new HashMap<>()); } else { Object object = clazz.newInstance(); object = getBean(object); result = clazz.getName() + "\t" + gson.toJson(object); } return result; } private static <T> Object getBean(T object) throws Exception { Class<?> classType = object.getClass(); //SqlRowSet srs = jdbcTemplate.queryForRowSet(sql); Field[] fields = classType.getDeclaredFields();//得到對象中的字段 //每次循環時,重新實例化一個與傳過來的對象類型一樣的對象 T objectCopy = (T) classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; String fieldName = field.getName(); Object value = null; //根據字段類型決定結果集中使用哪種get方法從數據中取到數據 if (field.getType().equals(String.class)) { value = ""; } else if (field.getType().equals(int.class) || field.getType().equals(Integer.class)) { value = new Integer(0); } else if (field.getType().equals(double.class) || field.getType().equals(Double.class)) { value = new Double(0); } else if (field.getType().equals(long.class) || field.getType().equals(Long.class)) { value = new Long(0); } else if (field.getType().equals(Date.class)) { value = new Date(); } else if (field.getType().equals(Object.class)) { value = new Object(); } // 獲得屬性的首字母並轉換為大寫,與setXXX對應 String firstLetter = fieldName.substring(0, 1).toUpperCase(); String setMethodName = "set" + firstLetter + fieldName.substring(1); if (fieldName.equals("serialVersionUID")) { continue; } Method setMethod = classType.getMethod(setMethodName, new Class[]{field.getType()}); setMethod.invoke(objectCopy, new Object[]{value});//調用對象的setXXX方法 } return objectCopy; } }
javaBean對象和Json格式字符串相互轉換
一般前後端開發都是使用json格式的字符串進行交互的,所以javaBean對象轉化為json格式字符串和json格式字符串轉化為javaBean對象顯的很有必要。
下面介紹兩種方法:
一.使用Jackson工具類
1.pom依賴
<!--jackson 2.x版本依賴--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency> <!--junit依賴--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
2.程序代碼
package com.john.json; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; import java.io.IOException; public class TestJackson { @Test public void testObjAndJson() throws IOException { Dog dog = new Dog(); dog.setName("櫻桃"); dog.setAge(1); dog.setFood("小米"); //創建Jackson高級對象 ObjectMapper mapper = new ObjectMapper(); //對象轉換為對應的json格式字符串 String json = mapper.writeValueAsString(dog); System.out.println(json); //json格式字符串轉換為對應的對象 Dog dogBack = mapper.readValue(json, Dog.class); System.out.println(dogBack.getName()+"--"+dogBack.getAge()+"--"+dogBack.getFood()); } }
二.使用Gson工具類
1.pom依賴
<!--gson依賴--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency> <!--junit依賴--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
2.程序代碼
package com.john.json; import com.google.gson.Gson; import org.junit.Test; public class TestGson { @Test public void testObjAndJson() { Dog dog = new Dog(); dog.setName("妞妞"); dog.setAge(3); dog.setFood("大米"); //創建gson對象 Gson gson = new Gson(); //對象轉化為對應的json格式字符串 String dogJson = gson.toJson(dog); System.out.println(dogJson); //json格式字符串轉換為對應的對象 Dog dogBack = gson.fromJson(dogJson, Dog.class); System.out.println(dogBack.getName()+"--"+dogBack.getAge()+"--"+dogBack.getFood()); } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 如何將Java對象轉換為JSON實例詳解
- Java中Json與List、Map、entity的互相轉化
- Gson之toJson和fromJson方法的具體使用
- JSON反序列化Long變Integer或Double的問題及解決
- 使用spring boot開發時java對象和Json對象轉換的問題