java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性代碼示例
一、使用場(chǎng)景
在開發(fā)過程中,有時(shí)候需要將后端數(shù)據(jù)返回前端,此時(shí)有些數(shù)據(jù)為空屬性不需要返回,或者有些屬性不需要返回,因此就需要處理。
二、環(huán)境準(zhǔn)備
1、引入依賴
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0</version> </dependency>
2、實(shí)體類
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor public class Student{ private Integer id; private String name; private Integer age; private String address; private BigDecimal score; private String className; private List<String> subjectList = new ArrayList<>(); }
三、示例
1、不返回空值
(1)方式
在實(shí)體類上面加上下面的注解:
@JsonInclude(JsonInclude.Include.NON_EMPTY)
(2)測(cè)試
Controller里面的方法:
@PostMapping("/getData") public R getData(){ Student student = new Student(); student.setName("Tom"); student.setAge(22); return R.ok().data("student", student); }
測(cè)試結(jié)果:
(3)說明
如果要對(duì)部分屬性進(jìn)行空值限制,分為兩類:
- 字符串、基本數(shù)據(jù)類型的設(shè)置,使用JsonInclude.Include.NON_NULL
- 對(duì)象、數(shù)組之類的設(shè)置,使用JsonInclude.Include.NON_EMPTY
import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor public class Student{ @JsonInclude(JsonInclude.Include.NON_NULL) private Integer id; @JsonInclude(JsonInclude.Include.NON_NULL) private String name; @JsonInclude(JsonInclude.Include.NON_NULL) private Integer age; @JsonInclude(JsonInclude.Include.NON_NULL) private String address; @JsonInclude(JsonInclude.Include.NON_NULL) private BigDecimal score; @JsonInclude(JsonInclude.Include.NON_NULL) private String className; @JsonInclude(JsonInclude.Include.NON_EMPTY) private List<String> subjectList = new ArrayList<>(); }
2、不返回部分屬性
(1)方式
實(shí)體類屬性上使用注解:
@JsonIgnore
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Student { private Integer id; private String name; private Integer age; @JsonIgnore private String address; private BigDecimal score; private String className; private List<String> subjectList = new ArrayList<>(); }
(2)測(cè)試
Controller里面的方法:
@PostMapping("/getData") public R getData(){ Student student = new Student(); student.setId(1001); student.setName("Tom"); student.setAge(22); student.setAddress("浙江"); return R.ok().data("student", student); }
測(cè)試結(jié)果:
四、 Jackson常用注解
1、 @JsonProperty
此注解用于屬性上,作用是把該屬性的名稱序列化為另外一個(gè)名稱,如把testPwd屬性序列化為pwd,@JsonProperty(value="pwd")。
2、@JsonPropertyOrder
作用在類上,被用來指明當(dāng)序列化時(shí)需要對(duì)屬性做排序,它有2個(gè)屬性一個(gè)是alphabetic:布爾類型,表示是否采用字母拼音順序排序,默認(rèn)是為false,即不排序。如@JsonPropertyOrder(alphabetic=true)。
3、@JsonInclude
是用在實(shí)體類的方法類的頭上 作用是實(shí)體類的參數(shù)查詢到的為null的不顯示,比如說你想傳一些json數(shù)據(jù)到前臺(tái),但是不想傳值為null的數(shù)據(jù),就可以使用該標(biāo)簽。如@JsonInclude(JsonInclude.Include.NON_NULL)
4、@JsonIgnoreProperties
可以注明是想要忽略的屬性列表如@JsonIgnoreProperties({"name","age","title"}),也可以注明過濾掉未知的屬性如@JsonIgnoreProperties(ignoreUnknown=true),@JsonIgnore表示忽略當(dāng)前屬性。
5、@JsonFormat
用在屬性和方法上,可以方便的進(jìn)行格式轉(zhuǎn)換,如把Date轉(zhuǎn)換為我們要的模式@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
6、@JsonUnwrapped
當(dāng)實(shí)體類中成員屬性是一個(gè)類的對(duì)象時(shí)候,忽略包裝。直接顯示屬性。
總結(jié)
到此這篇關(guān)于java后端返回?cái)?shù)據(jù)給前端時(shí)去除值為空或NULL的屬性、忽略某些屬性的文章就介紹到這了,更多相關(guān)java后端返回?cái)?shù)據(jù)去除空值或NULL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring中11個(gè)最常用的擴(kuò)展點(diǎn)總結(jié),你知道幾個(gè)
我們知道IOC(控制反轉(zhuǎn))和AOP(面向切面編程)是spring的基石,除此之外spring的擴(kuò)展能力非常強(qiáng),下面這篇文章主要給大家介紹了關(guān)于Spring中11個(gè)最常用的擴(kuò)展點(diǎn)的相關(guān)資料,需要的朋友可以參考下2022-12-12基于SpringBoot實(shí)現(xiàn)Web應(yīng)用的登錄與退出功能
登錄與退出功能作為 Web 應(yīng)用中的基礎(chǔ)且重要的組成部分,直接關(guān)系到用戶的安全和隱私保護(hù),所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)Web應(yīng)用的登錄與退出功能,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下2024-04-04spring boot 統(tǒng)一JSON格式的接口返回結(jié)果的實(shí)現(xiàn)
這篇文章主要介紹了spring boot 統(tǒng)一JSON格式的接口返回結(jié)果的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Spring中使用Async進(jìn)行異步功能開發(fā)實(shí)戰(zhàn)示例(大文件上傳為例)
本文以大文件上傳為例,首先講解在未進(jìn)行程序異步化時(shí),程序的運(yùn)行機(jī)制和具體表現(xiàn),然后講解如何進(jìn)行異步化的改造,讓程序進(jìn)行異步執(zhí)行,通過本文不僅能讓你掌握如何進(jìn)行Event的事件開發(fā),同時(shí)還能掌握在Spring中如何進(jìn)行異步開發(fā),熟悉@Async的具體用法,感興趣的朋友一起看看吧2024-08-08Rxjava+Retrofit+MVP實(shí)現(xiàn)購物車功能
這篇文章主要為大家詳細(xì)介紹了Rxjava+Retrofit+MVP實(shí)現(xiàn)購物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Java中ReentrantLock和ReentrantReadWriteLock的原理
這篇文章主要介紹了Java中ReentrantLock和ReentrantReadWriteLock的原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09SpringBoot整合Redis正確的實(shí)現(xiàn)分布式鎖的示例代碼
這篇文章主要介紹了SpringBoot整合Redis正確的實(shí)現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07