国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java對象中轉(zhuǎn)換空值的字段

這篇具有很好參考價值的文章主要介紹了Java對象中轉(zhuǎn)換空值的字段。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在后端返回數(shù)據(jù)給前端時,公司的框架會把值為null的數(shù)據(jù)去掉,方便前端取值。

如:Person對象為:{name:"浩二", age:24, weight:null, height:114},那返回給前端的就為{name:"浩二", age:24, height:114}。

如果這個時候有個需求:

? Integer類型的字段為null給-1

? Long類型的字段為null給-1L

? String類型的字段為null給""(空字符串)

? 對象類型的字段為null給new對象,

不能直接動框架,因此需要手動轉(zhuǎn)化。

?

代碼寫死轉(zhuǎn)換

這種是最簡單的方式,顧名思義,寫死代碼的方式一個一個字段來轉(zhuǎn)換

示例

轉(zhuǎn)換對象 ConvertNullFiledInfo

@Data
public class ConvertNullFiledInfo {
?
    private Integer intNum;
?
    private Long longNum;
?
    private String str;
?
    private ConvertNullFiledInfo info;
?
}

轉(zhuǎn)換代碼

@Service
public class ConvertNullFiledService {
?
    /**
     * 寫死代碼的方式一個一個字段來轉(zhuǎn)換
     * @param info
     * @return
     */
    public ConvertNullFiledInfo convertFunction01(ConvertNullFiledInfo info) {
        info.setIntNum(info.getIntNum() == null ? -1 : info.getIntNum());
        info.setLongNum(info.getLongNum() == null ? -1L : info.getLongNum());
        info.setStr(info.getStr() == null ? "" : info.getStr());
        info.setInfo(info.getInfo() == null ? new ConvertNullFiledInfo() : info.getInfo());
        return info;
    }
    
}

測試代碼

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
?
?
@SpringBootTest
@RunWith(SpringRunner.class)
public class ConvertNullFiledServiceTest {
?
    @Autowired
    private ConvertNullFiledService convertNullFiledService;
?
    @Test
    public void convertFunction01() {
        // str和info字段給null
        ConvertNullFiledInfo info = createConvertNullFiledInfo(1, 1L, null, null);
        ConvertNullFiledInfo result = convertNullFiledService.convertFunction01(info);
        System.out.println(result);
    }
?
    /**
     * 自定義字段創(chuàng)建ConvertNullFiledInfo
     * @param intNum
     * @param longNum
     * @param str
     * @param info
     * @return
     */
    private ConvertNullFiledInfo createConvertNullFiledInfo(Integer intNum, Long longNum, String str, ConvertNullFiledInfo info) {
        ConvertNullFiledInfo result = new ConvertNullFiledInfo();
        result.setIntNum(intNum);
        result.setLongNum(longNum);
        result.setStr(str);
        result.setInfo(info);
        return result;
    }
    
}

運行結(jié)果

Java對象中轉(zhuǎn)換空值的字段

可以看到是正常轉(zhuǎn)換了的

問題點

這樣寫雖然簡單方便,但是如果有非常多的對象需要轉(zhuǎn)換,就會有許多重復(fù)代碼;

而且如果字段有修改(類型、名稱、被刪除、新增),就需要在去轉(zhuǎn)換方法中修改,因此可以用更好的方式。

?

遍歷Filed轉(zhuǎn)換

所有對象都有Class<T>類,而Class有g(shù)etDeclaredFields()方法,能獲取到所有字段(filed),

因此可以使用這種方式來轉(zhuǎn)換。

示例

轉(zhuǎn)換代碼

/**
     * 遍歷field的方式一個一個字段來轉(zhuǎn)換
     * @param info
     * @return
     */
    public ConvertNullFiledInfo convertByField(ConvertNullFiledInfo info) {
        try {
            Field[] fields = info.getClass().getDeclaredFields();
            for (Field field : fields) {
                // 設(shè)置可訪問私有變量
                field.setAccessible(true);
                // 獲取當前字段值
                Object value = field.get(info);
                // value不為空就跳過
                if (value != null) {
                    continue;
                }
                // 獲取當前字段類型
                Class<?> type = field.getType();
                if (type == Integer.class) {
                    // Integer類型就設(shè)置為-1
                    field.set(info, -1);
                } else if (type == Long.class) {
                    // Long類型就設(shè)置為-1L
                    field.set(info, -1L);
                } else if (type == String.class) {
                    // String類型就設(shè)置為“”
                    field.set(info, "");
                } else if (type == ConvertNullFiledInfo.class) {
                    // ConvertNullFiledInfo類型就設(shè)置為新對象
                    field.set(info, new ConvertNullFiledInfo());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return info;
    }

測試代碼

@Test
public void convertByField() {
    // str和info字段給null
    ConvertNullFiledInfo info = createConvertNullFiledInfo(1, 1L, null, null);
    ConvertNullFiledInfo result = convertNullFiledService.convertByField(info);
    System.out.println(result);
}

運行結(jié)果

Java對象中轉(zhuǎn)換空值的字段

可以看到也是成功轉(zhuǎn)換了

問題點

這種寫法仍然存在問題,可以看到方法的傳參和返回值都是固定類型為ConvertNullFiledInfo,

并且在遍歷field的時候,也有if判斷是寫定的ConvertNullFiledInfo,

因此也在一定程度上寫死了代碼

優(yōu)化

為了避免寫死的情況,可以使用泛型來寫

轉(zhuǎn)換代碼

@Service
public class ConvertNullFiledService<T> {
    
    /**
     * 使用泛型,遍歷field的方式一個一個字段來轉(zhuǎn)換
     * @param object
     * @return
     */
    public T convertByFieldGeneric(T object) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();
            for (Field field : fields) {
                // 設(shè)置可訪問私有變量
                field.setAccessible(true);
                // 獲取當前字段值
                Object value = field.get(object);
                // value不為空就跳過
                if (value != null) {
                    continue;
                }
                // 獲取當前字段類型
                Class<?> type = field.getType();
                if (type == Integer.class) {
                    // Integer類型就設(shè)置為-1
                    field.set(object, -1);
                } else if (type == Long.class) {
                    // Long類型就設(shè)置為-1L
                    field.set(object, -1L);
                } else if (type == String.class) {
                    // String類型就設(shè)置為“”
                    field.set(object, "");
                } else if (type == object.getClass()) {
                    // T類型就設(shè)置為新對象
                    Object newObj = object.getClass().newInstance();
                    field.set(object, newObj);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return object;
    }
}

測試代碼

@Test
public void convertByFieldGeneric() {
    // 全部字段給null
    ConvertNullFiledInfo info = createConvertNullFiledInfo(null, null, null, null);
    ConvertNullFiledInfo result = (ConvertNullFiledInfo) convertNullFiledService.convertByFieldGeneric(info);
    System.out.println(result);
}

運行結(jié)果

Java對象中轉(zhuǎn)換空值的字段

成功轉(zhuǎn)換文章來源地址http://www.zghlxwxcb.cn/news/detail-477139.html

?

到了這里,關(guān)于Java對象中轉(zhuǎn)換空值的字段的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 處理數(shù)據(jù)傳入 Word 文檔中的空值的方法詳解

    處理數(shù)據(jù)傳入 Word 文檔中的空值的方法詳解

    前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站,這篇文章男女通用,看懂了就去分享給你的碼吧。 在將數(shù)據(jù)傳入 Word 文檔時,可能會遇到空值的情況,即某些數(shù)據(jù)項為空。本文將介紹如何處理數(shù)據(jù)傳入 Word 文檔中

    2024年02月15日
    瀏覽(56)
  • JSON對象字段為null值的顯示處理

    JSON對象字段為null值的顯示處理

    如何將JSON對象中字段為null值的也顯示出來 如果字段的值為null,json對象的默認設(shè)置是當字段為null時,不會將該字段和null值添加到這個json對象中; 1、針對jackson的json對象全局配置(舉例application.properties文件): 針對gson的json對象全局配置(舉例application.properties文件): 當然也可以通過

    2024年02月12日
    瀏覽(27)
  • pandas進行數(shù)據(jù)計算時如何處理空值的問題?

    pandas進行數(shù)據(jù)計算時如何處理空值的問題?

    目錄 1.數(shù)據(jù)預(yù)覽: 2.解決方法 (1)問題示例 (2)方法 A.方法一 B.方法二 如下圖如果不理睬這些空值的話,計算總分便也會是空值 A.方法一 我們可以利用fillna(0)將空值填充為零再進行計算 B.方法二 利用靈活算數(shù)法中的fill_value參數(shù)將空值填充為零 方法 描述 add 加法 sub 減法

    2024年01月18日
    瀏覽(33)
  • 后端用對象接收json時,對象無法獲取值的問題

    后端用對象接收json時,對象無法獲取值的問題

    在項目里做前端傳json到后端處理數(shù)據(jù)時,由于傳遞的json比較復(fù)雜,故用對象進行接收,但在postman測試時發(fā)現(xiàn)無論如何對象都沒法成功接收值 (這里我直接把接收到的值又回傳了,方便直接在postman查看) 問題排查 1.猜測缺少@RequeBody,實際上項目controller層包含了RestControlle

    2024年02月13日
    瀏覽(28)
  • 后端java 如何返回給前端 JSON數(shù)據(jù)

    在上述代碼中,@ResponseBody注解用于將Java List對象轉(zhuǎn)換為JSON格式的數(shù)據(jù),并返回給前端。Spring會自動將List對象轉(zhuǎn)換為JSON格式的數(shù)組,其中每個元素都是一個JSON對象。在本例中,每個JSON對象都包含一個name屬性和一個age屬性。 Regenerate

    2024年02月15日
    瀏覽(22)
  • PostgreSQL空值的判斷

    PostgreSQL空值的判斷

    2024年02月12日
    瀏覽(23)
  • HIVE數(shù)據(jù)導(dǎo)入ES并避免字段空值占用空間

    HIVE數(shù)據(jù)導(dǎo)入ES并避免字段空值占用空間

    1、自己下載?elasticsearch-hadoop-6.6.0.jar依賴包,根據(jù)自己es版本選擇,下載地址: 2、文件上傳HDFS指定位置,我這邊放在 3、hive加載jar包? --注意,部分不加載“commons-httpclient-3.1.jar”可能會報錯 error in initSerDe: java.lang.NoClassDefFoundError org/apache/commons/httpclient ,可以直接把包放在

    2023年04月08日
    瀏覽(20)
  • vue 對后端返回字段值為null的變成空字符串

    // 字段null轉(zhuǎn)字符串 1.export function null2str(data) { ? ? for (let x in data) { ? ? ? ? if (data[x] === null) { ? ? ? ? ? ? // 如果是null 把直接內(nèi)容轉(zhuǎn)為 \\\'\\\' ? ? ? ? ? ? data[x] = \\\"\\\"; ? ? ? ? } else { ? ? ? ? ? ? if (Array.isArray(data[x])) { ? ? ? ? ? ? ? ? // 是數(shù)組遍歷數(shù)組 遞歸繼續(xù)處理 ? ? ?

    2024年02月11日
    瀏覽(25)
  • java多線程帶返回值的方式方法

    java多線程帶返回值的方式方法

    使用線程池 方法一得到的結(jié)果如下,使用線程池我這里是核數(shù)乘以2是核心線程16,最大17,所以這里最多是16個線程,而且他是無序的隨機分配的 重點不用線程池使用@Async注解,但是策略得有所調(diào)整,大體邏輯比如你待處理的數(shù)據(jù)有100條,你可以將這個List按10條為一個新的

    2024年01月22日
    瀏覽(15)
  • Java實現(xiàn)方法接口入?yún)⑼瑫r包含文件、字段和對象等多種類型。HTTP請求返回415狀態(tài),Content type ‘a(chǎn)pplication/octet-stream‘ not supported錯誤。

    Java實現(xiàn)方法接口入?yún)⑼瑫r包含文件、字段和對象等多種類型。HTTP請求返回415狀態(tài),Content type ‘a(chǎn)pplication/octet-stream‘ not supported錯誤。

    方法一:對象不使用注解 使用Postman測試,直接將subject對象的字段填在key的位置 方法二:對象使用注解@RequestPart 使用Postman測試,將字段包裝在subject對象里,使用Content type:application/json的內(nèi)容類型 注:方法二在開發(fā)本地測試執(zhí)行成功,但是在測試人員機子下不通過,執(zhí)行報

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包