欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項(xiàng)目中忽略某屬性返回?cái)?shù)據(jù)給前端

 更新時(shí)間:2024年05月02日 11:02:08   作者:玉成226  
在Spring Boot中,保護(hù)敏感信息和減少數(shù)據(jù)傳輸是很重要的,我們可以使用多種方法來忽略返回?cái)?shù)據(jù)中的字段,無論是使用@JsonIgnore注解、Projection投影、@JsonIgnoreProperties注解還是自定義序列化器,都能達(dá)到我們的目的,在實(shí)際應(yīng)用中,根據(jù)具體場(chǎng)景和需求選擇合適的方法

在使用Spring Boot開發(fā)應(yīng)用程序時(shí),經(jīng)常會(huì)遇到需要返回DTO(數(shù)據(jù)傳輸對(duì)象)的情況,而不是返回實(shí)體類。有時(shí)候,實(shí)體類中的某些字段可能包含敏感信息或不需要傳遞給客戶端。在這種情況下,我們需要找到一種方法來忽略這些字段并只返回需要的數(shù)據(jù)。

一、忽略實(shí)體類中的屬性

1、@JsonIgnore

@JsonIgnore注解是Jackson庫(kù)中的一個(gè)注解,用于在實(shí)體類向前臺(tái)返回?cái)?shù)據(jù)時(shí)忽略不想傳遞給前臺(tái)的屬性或接口。當(dāng)你在Java類的某個(gè)屬性或方法上添加@JsonIgnore注解時(shí),Jackson在將對(duì)象序列化為JSON時(shí)將會(huì)忽略這個(gè)屬性或方法,也就是說這個(gè)屬性或方法將不會(huì)出現(xiàn)在生成的JSON字符串中。這對(duì)于那些你不希望暴露給前端的屬性(如密碼、敏感信息等)非常有用。

例如,在User類中,如果你有一個(gè)password屬性,并且你不希望在前臺(tái)看到這個(gè)屬性,你可以在password屬性上添加@JsonIgnore注解。

此外,還有一個(gè)類似的注解叫做@JsonIgnoreProperties,這是一個(gè)類注解,用于在json序列化時(shí)將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。你可以在類上添加這個(gè)注解,并指定要忽略的屬性名列表。

需要注意的是,如果在使用fastJson而不是Jackson作為JSON處理庫(kù),那么@JsonIgnore注解可能不會(huì)生效。在fastJson中,你需要使用@JSONField(serialize = false)注解來達(dá)到相同的效果。

2、@JSONField(serialize = false)

@JSONField注解是阿里巴巴fastjson庫(kù)中的注解,用于控制Java對(duì)象與JSON字符串之間的轉(zhuǎn)換。它可以用于控制序列化和反序列化過程中的一些細(xì)節(jié),例如日期格式、序列化順序、字段名稱等。

@JSONField注解可以作用在方法、屬性以及方法中的參數(shù)上。在JSONField注解中,name屬性用來指定JSON串中key的名稱。例如,@JSONField(name = “id”)表示將Java對(duì)象中的userId字段映射到JSON字符串中的"id"字段。

此外,@JSONField注解還有其他一些常用的屬性,如:

format:用于指定日期或數(shù)字的格式。例如,@JSONField(format = “yyyy-MM-dd HH:mm:ss”)表示將Java對(duì)象中的createTime字段按照指定的日期格式轉(zhuǎn)換為JSON字符串。serialize:用于指定是否序列化某個(gè)字段。例如,@JSONField(serialize = false)表示不序列化某個(gè)字段。ordinal:用于指定序列化順序,數(shù)值越小越先序列化。

通過使用@JSONField注解,你可以靈活地控制Java對(duì)象與JSON字符串之間的轉(zhuǎn)換,實(shí)現(xiàn)更復(fù)雜的序列化和反序列化需求。

3、@JsonInclude

@JsonInclude 是 Jackson 庫(kù)中的一個(gè)注解,它用于定制在序列化(即將 Java 對(duì)象轉(zhuǎn)換為 JSON 字符串)過程中哪些屬性應(yīng)該被包含在內(nèi)。這個(gè)注解可以用于類、方法或字段,以定義如何包含字段值。

Jackson 提供了幾種不同的 Include 策略:

JsonInclude.Include.ALWAYS:始終包含屬性,無論其值是什么。
JsonInclude.Include.NON_ABSENT:包含非空的(non-absent)屬性。這相當(dāng)于 NON_NULL(非空)加上非空集合、非空映射等。JsonInclude.Include.NON_DEFAULT:包含其值不等于字段默認(rèn)值的屬性。這需要注意,對(duì)于基本數(shù)據(jù)類型(如 int、long 等),它們的默認(rèn)值通常是 0 或 false,而對(duì)于包裝類型(如 Integer、Long 等),默認(rèn)值是 null。
JsonInclude.Include.NON_EMPTY:對(duì)于字符串,只包含非空字符串;對(duì)于集合、數(shù)組和映射,只包含非空集合。JsonInclude.Include.NON_NULL:只包含非空(non-null)屬性。
JsonInclude.Include.CUSTOM:使用自定義的包含策略。

例如,如果你有一個(gè)類并且你只想在序列化時(shí)包含非空的字段,你可以這樣做:

import com.fasterxml.jackson.annotation.JsonInclude;  
@JsonInclude(JsonInclude.Include.NON_NULL)  
public class MyObject {  
    private String name;  
    private Integer age;  
    // getters and setters  
}

在這個(gè)例子中,如果 name 或 age 字段的值為 null,那么在序列化 MyObject 的實(shí)例為 JSON 字符串時(shí),這些字段將不會(huì)被包含在內(nèi)。

這個(gè)注解非常有用,因?yàn)樗梢詭椭憧刂粕傻?JSON 字符串的大小和可讀性,尤其是在你有很多可選字段或嵌套對(duì)象的情況下。

二、忽略實(shí)體類中的方法返回值

@Transient注解是Java EE規(guī)范提供的javax.persistence包定義的注解之一。這個(gè)注解的作用是指定該屬性或字段不是永久的,即告訴MyBatis不需要將該字段映射為數(shù)據(jù)庫(kù)表的列,也就是標(biāo)記實(shí)體類中不需要持久化到數(shù)據(jù)庫(kù)的字段。

@Transient注解的使用不僅限于實(shí)體類上有@Table注解的屬性,它可以用在任何實(shí)體類的字段或者方法上。無論實(shí)體類是否有@Table注解,只要被@Transient注解標(biāo)記的字段或方法都會(huì)被忽略,不進(jìn)行數(shù)據(jù)庫(kù)映射操作。

此外,@Transient注解也可以用于Java序列化過程中,用于標(biāo)記不希望序列化的字段。當(dāng)對(duì)象被序列化時(shí),被標(biāo)記為@Transient的字段將被忽略。

總的來說,@Transient注解的主要作用是在Java EE的持久化和序列化過程中,告訴系統(tǒng)哪些字段或?qū)傩圆恍枰惶幚怼?/p>

@Data
public class ResourceParam {
    private String field1;
    private String field2;
    private String field3;
    @Transient
    public String getTest() {
        return “string”;
    }
}

總結(jié)

在Spring Boot中,我們可以使用多種方法來忽略返回?cái)?shù)據(jù)中的字段。無論是使用@JsonIgnore注解、Projection投影、@JsonIgnoreProperties注解還是自定義序列化器,都能達(dá)到我們的目的。

在實(shí)際應(yīng)用中,根據(jù)具體場(chǎng)景和需求選擇合適的方法。請(qǐng)記住,保護(hù)敏感信息和減少數(shù)據(jù)傳輸是很重要的。通過忽略不必要的字段,我們可以提高系統(tǒng)的性能和安全性。

相關(guān)文章

  • java關(guān)于持久層面試題目整理

    java關(guān)于持久層面試題目整理

    在本篇文章里小編給大家分享的是一篇關(guān)于java關(guān)于持久層面試題目整理內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • Java中List列表去重有序和無序的6種方法

    Java中List列表去重有序和無序的6種方法

    在日常的業(yè)務(wù)開發(fā)中,會(huì)遇到List中的重復(fù)數(shù)據(jù)去除掉的場(chǎng)景,本文就來介紹一下Java中List列表去重有序和無序的6種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴JAR包分離

    springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴JAR包分離

    這篇文章主要介紹了springboot打包實(shí)現(xiàn)項(xiàng)目JAR包和依賴JAR包分離,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • javax.persistence中@Column定義字段類型方式

    javax.persistence中@Column定義字段類型方式

    這篇文章主要介紹了javax.persistence中@Column定義字段類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot整合JWT框架,解決Token跨域驗(yàn)證問題

    SpringBoot整合JWT框架,解決Token跨域驗(yàn)證問題

    Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).定義了一種簡(jiǎn)潔的,自包含的方法用于通信雙方之間以JSON對(duì)象的形式安全的傳遞信息。
    2021-06-06
  • SpringBoot @CompentScan excludeFilters配置無效的解決方案

    SpringBoot @CompentScan excludeFilters配置無效的解決方案

    這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot中的HATEOAS詳情

    SpringBoot中的HATEOAS詳情

    這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別

    java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別

    這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下
    2017-08-08
  • 簡(jiǎn)單了解java ORM框架JOOQ

    簡(jiǎn)單了解java ORM框架JOOQ

    這篇文章主要介紹了簡(jiǎn)單了解java ORM框架JOOQ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot3中token攔截器鏈的設(shè)計(jì)與實(shí)現(xiàn)步驟

    SpringBoot3中token攔截器鏈的設(shè)計(jì)與實(shí)現(xiàn)步驟

    本文介紹了spring boot后端服務(wù)開發(fā)中有關(guān)如何設(shè)計(jì)攔截器的思路,文中通過代碼示例和圖文講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03

最新評(píng)論