給JavaBean賦默認(rèn)值并且轉(zhuǎn)Json字符串的實(shí)例
JavaBean賦默認(rèn)值并轉(zhuǎn)Json字符串
今日在工作中整理dubbo接口的時(shí)候,有些接口參數(shù)類型是JavaBean類型的數(shù)據(jù),在整理的時(shí)候又想直接將JavaBean參數(shù)直接以默認(rèn)的json格式整理,于是想到如何將javaBean的默認(rèn)值 直接轉(zhuǎn)換成為 Json格式的數(shù)據(jù),避免自己手動(dòng)去拼寫json字符串。
此段代碼還有值得優(yōu)化的地方
暫時(shí)只支持Java基本數(shù)據(jù)類型的轉(zhuǎn)換,不支持javaBean中包含其他javaBean對象變量的轉(zhuǎn)換、也不支持List/Map等類型的轉(zhuǎn)換,后期有空想辦法優(yōu)化,大家如果有優(yōu)化好的代碼也可以拿出來分享
廢話不多說,直接上代碼
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();//得到對象中的字段 //每次循環(huán)時(shí),重新實(shí)例化一個(gè)與傳過來的對象類型一樣的對象 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; //根據(jù)字段類型決定結(jié)果集中使用哪種get方法從數(shù)據(jù)中取到數(shù)據(jù) 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(); } // 獲得屬性的首字母并轉(zhuǎn)換為大寫,與setXXX對應(yīng) 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});//調(diào)用對象的setXXX方法 } return objectCopy; } }
javaBean對象和Json格式字符串相互轉(zhuǎn)換
一般前后端開發(fā)都是使用json格式的字符串進(jìn)行交互的,所以javaBean對象轉(zhuǎn)化為json格式字符串和json格式字符串轉(zhuǎn)化為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("小米"); ? ? ? ? ? //創(chuàng)建Jackson高級對象 ? ? ? ? ObjectMapper mapper = new ObjectMapper(); ? ? ? ? ? //對象轉(zhuǎn)換為對應(yīng)的json格式字符串 ? ? ? ? String json = mapper.writeValueAsString(dog);? ? ? ? ? System.out.println(json); ? ? ? ? ? //json格式字符串轉(zhuǎn)換為對應(yīng)的對象 ? ? ? ? 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("大米"); ? ? ? ? ? //創(chuàng)建gson對象 ? ? ? ? Gson gson = new Gson(); ? ? ? ? ? //對象轉(zhuǎn)化為對應(yīng)的json格式字符串 ? ? ? ? String dogJson = gson.toJson(dog);? ? ? ? ? System.out.println(dogJson); ? ? ? ? ? //json格式字符串轉(zhuǎn)換為對應(yīng)的對象 ? ? ? ? Dog dogBack = gson.fromJson(dogJson, Dog.class);? ? ? ? ? System.out.println(dogBack.getName()+"--"+dogBack.getAge()+"--"+dogBack.getFood()); ? ? }? }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?MVC策略模式之MethodArgumentResolver源碼解析
這篇文章主要為大家介紹了Spring?MVC策略模式之MethodArgumentResolver源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java基礎(chǔ)之SpringBoot整合knife4j
Swagger現(xiàn)在已經(jīng)成了最流行的接口文檔生成與管理工具,但是你是否在用的時(shí)候也在吐槽,它是真的不好看,接口測試的json數(shù)據(jù)沒法格式化,測試地址如果更改了還要去改配置,接口測試時(shí)增加token驗(yàn)證是真的麻煩…針對Swagger的種種缺點(diǎn),Knife4j就呼之欲出了.需要的朋友可以參考下2021-05-05SpringBoot接口如何對參數(shù)進(jìn)行校驗(yàn)
這篇文章主要介紹了SpringBoot接口如何對參數(shù)進(jìn)行校驗(yàn),在以SpringBoot開發(fā)Restful接口時(shí),?對于接口的查詢參數(shù)后臺也是要進(jìn)行校驗(yàn)的,同時(shí)還需要給出校驗(yàn)的返回信息放到上文我們統(tǒng)一封裝的結(jié)構(gòu)中2022-07-07關(guān)于二分法查找Java的實(shí)現(xiàn)及解析
這篇文章主要介紹了關(guān)于二分法查找Java的實(shí)現(xiàn)及解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07