溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何給JavaBean賦默認(rèn)值且轉(zhuǎn)Json字符串

發(fā)布時(shí)間:2022-03-03 10:29:09 來源:億速云 閱讀:254 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了如何給JavaBean賦默認(rèn)值且轉(zhuǎn)Json字符串的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇如何給JavaBean賦默認(rèn)值且轉(zhuǎn)Json字符串文章都會(huì)有所收獲,下面我們一起來看看吧。

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());
    } 
}

關(guān)于“如何給JavaBean賦默認(rèn)值且轉(zhuǎn)Json字符串”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何給JavaBean賦默認(rèn)值且轉(zhuǎn)Json字符串”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI