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

SpringBoot項目中忽略某屬性返回數(shù)據(jù)給前端

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

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

一、忽略實體類中的屬性

1、@JsonIgnore

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

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

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

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

2、@JSONField(serialize = false)

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

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

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

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

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

3、@JsonInclude

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

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

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

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

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

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

這個注解非常有用,因為它可以幫助你控制生成的 JSON 字符串的大小和可讀性,尤其是在你有很多可選字段或嵌套對象的情況下。

二、忽略實體類中的方法返回值

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

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

此外,@Transient注解也可以用于Java序列化過程中,用于標(biāo)記不希望序列化的字段。當(dāng)對象被序列化時,被標(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中,我們可以使用多種方法來忽略返回數(shù)據(jù)中的字段。無論是使用@JsonIgnore注解、Projection投影、@JsonIgnoreProperties注解還是自定義序列化器,都能達(dá)到我們的目的。

在實際應(yīng)用中,根據(jù)具體場景和需求選擇合適的方法。請記住,保護敏感信息和減少數(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ā)中,會遇到List中的重復(fù)數(shù)據(jù)去除掉的場景,本文就來介紹一下Java中List列表去重有序和無序的6種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • springboot打包實現(xiàn)項目JAR包和依賴JAR包分離

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

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

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

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

    SpringBoot整合JWT框架,解決Token跨域驗證問題

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

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

    這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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
  • 簡單了解java ORM框架JOOQ

    簡單了解java ORM框架JOOQ

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

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

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

最新評論