<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今日在工作中整理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; } }
一般前後端開發都是使用json格式的字串進行互動的,所以javaBean物件轉化為json格式字串和json格式字串轉化為javaBean物件顯的很有必要。
下面介紹兩種方法:
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()); } }
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()); } }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45