最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

給JavaBean賦默認(rèn)值并且轉(zhuǎn)Json字符串的實(shí)例

 更新時(shí)間:2022年03月02日 14:29:11   作者:南_俊  
這篇文章主要介紹了給JavaBean賦默認(rèn)值并且轉(zhuǎn)Json字符串的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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對(duì)象變量的轉(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();//得到對(duì)象中的字段
        //每次循環(huán)時(shí),重新實(shí)例化一個(gè)與傳過來的對(duì)象類型一樣的對(duì)象
        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對(duì)應(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)用對(duì)象的setXXX方法
        } 
        return objectCopy;
    }
}

javaBean對(duì)象和Json格式字符串相互轉(zhuǎn)換

一般前后端開發(fā)都是使用json格式的字符串進(jìn)行交互的,所以javaBean對(duì)象轉(zhuǎn)化為json格式字符串和json格式字符串轉(zhuǎn)化為javaBean對(duì)象顯的很有必要。

下面介紹兩種方法:

一.使用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高級(jí)對(duì)象
? ? ? ? ObjectMapper mapper = new ObjectMapper();
?
? ? ? ? //對(duì)象轉(zhuǎn)換為對(duì)應(yīng)的json格式字符串
? ? ? ? String json = mapper.writeValueAsString(dog);?
? ? ? ? System.out.println(json);
?
? ? ? ? //json格式字符串轉(zhuǎn)換為對(duì)應(yīng)的對(duì)象
? ? ? ? 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對(duì)象
? ? ? ? Gson gson = new Gson();
?
? ? ? ? //對(duì)象轉(zhuǎn)化為對(duì)應(yīng)的json格式字符串
? ? ? ? String dogJson = gson.toJson(dog);?
? ? ? ? System.out.println(dogJson);
?
? ? ? ? //json格式字符串轉(zhuǎn)換為對(duì)應(yīng)的對(duì)象
? ? ? ? Dog dogBack = gson.fromJson(dogJson, Dog.class);?
? ? ? ? System.out.println(dogBack.getName()+"--"+dogBack.getAge()+"--"+dogBack.getFood());
? ? }?
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點(diǎn)

    詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點(diǎn)

    很多小伙伴都不知道如何用Java創(chuàng)建文件夾,今天給大家整理了這篇文章,文中有非常詳細(xì)的方法介紹及方法的優(yōu)缺點(diǎn),對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot自動(dòng)配置Quartz的實(shí)現(xiàn)步驟

    SpringBoot自動(dòng)配置Quartz的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot自動(dòng)配置Quartz的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 利用Java手寫一個(gè)簡易的lombok的示例代碼

    利用Java手寫一個(gè)簡易的lombok的示例代碼

    Lombok是一款Java開發(fā)插件,使得Java開發(fā)者可以通過其定義的一系列注解來消除業(yè)務(wù)工程中冗長和繁瑣的代碼,尤其對(duì)于簡單的Java模型對(duì)象。本文就來手寫一個(gè)簡易的lombok,需要的可以參考一下
    2022-10-10
  • SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段

    SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段

    這篇文章主要介紹了SpringBoot使用JPA實(shí)現(xiàn)查詢部分字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解Java排序算法中的冒泡和選擇排序

    詳解Java排序算法中的冒泡和選擇排序

    這篇文章主要給大家介紹了Java排序算法中的冒泡排序和選擇排序,文中有詳細(xì)的圖文解釋和代碼示例,對(duì)我們學(xué)習(xí)Java算法有一定的幫助,感興趣的同學(xué)可以參考閱讀下
    2023-06-06
  • Java實(shí)現(xiàn)五子棋單機(jī)版

    Java實(shí)現(xiàn)五子棋單機(jī)版

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋單機(jī)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入了解Java GC的工作原理

    深入了解Java GC的工作原理

    下面小編就為大家?guī)硪黄钊肓私釰ava GC的工作原理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java中String、StringBuffer和StringBuilder的區(qū)別

    Java中String、StringBuffer和StringBuilder的區(qū)別

    這篇文章主要介紹了Java中String、StringBuffer和StringBuilder的區(qū)別,StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串char[]value但是沒有final關(guān)鍵字修飾,所以這兩個(gè)可變,需要的朋友可以參考下
    2024-01-01
  • java后端PayPal支付實(shí)現(xiàn)教程

    java后端PayPal支付實(shí)現(xiàn)教程

    本文主要介紹了java后端PayPal支付實(shí)現(xiàn)教程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 解讀Eureka的TimedSupervisorTask類(自動(dòng)調(diào)節(jié)間隔的周期性任務(wù))

    解讀Eureka的TimedSupervisorTask類(自動(dòng)調(diào)節(jié)間隔的周期性任務(wù))

    在Eureka客戶端中,盡管ScheduledExecutorService的schedule方法創(chuàng)建的是一次性任務(wù),但通過在任務(wù)執(zhí)行完畢后再次調(diào)用schedule方法實(shí)現(xiàn)了周期性執(zhí)行,這種設(shè)計(jì)既考慮到了任務(wù)超時(shí)導(dǎo)致的間隔時(shí)間調(diào)整,又通過CAS實(shí)現(xiàn)了多線程同步,展現(xiàn)了簡潔而巧妙的設(shè)計(jì)思想
    2024-11-11

最新評(píng)論

绍兴县| 金秀| 邳州市| 泗洪县| 南乐县| 轮台县| 吉安县| 兰坪| 章丘市| 本溪市| 宁明县| 永善县| 和静县| 洛隆县| 雷波县| 陆丰市| 田阳县| 鱼台县| 广元市| 抚州市| 克什克腾旗| 来凤县| 苍南县| 怀安县| 定边县| 琼结县| 济阳县| 宕昌县| 通山县| 和田市| 佛山市| 兰坪| 宜昌市| 嘉兴市| 汨罗市| 巴马| 北安市| 昌宁县| 馆陶县| 德化县| 礼泉县|