SpringBoot項目中忽略某屬性返回數(shù)據(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)文章
springboot打包實現(xiàn)項目JAR包和依賴JAR包分離
這篇文章主要介紹了springboot打包實現(xiàn)項目JAR包和依賴JAR包分離,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02javax.persistence中@Column定義字段類型方式
這篇文章主要介紹了javax.persistence中@Column定義字段類型方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11SpringBoot整合JWT框架,解決Token跨域驗證問題
Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).定義了一種簡潔的,自包含的方法用于通信雙方之間以JSON對象的形式安全的傳遞信息。2021-06-06SpringBoot @CompentScan excludeFilters配置無效的解決方案
這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別
這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下2017-08-08SpringBoot3中token攔截器鏈的設(shè)計與實現(xiàn)步驟
本文介紹了spring boot后端服務(wù)開發(fā)中有關(guān)如何設(shè)計攔截器的思路,文中通過代碼示例和圖文講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-03-03