Java接口返回json如何忽略特定屬性_第1頁
Java接口返回json如何忽略特定屬性_第2頁
Java接口返回json如何忽略特定屬性_第3頁
Java接口返回json如何忽略特定屬性_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Java接口返回json如何忽略特定屬性目錄經(jīng)常遇到的問題不完美的解決方案通過SimplePropertyPreFilter方式(Json返回)場景一:只保留name和sex字段場景二:過濾掉email和phone字段@ResponseBody返回json如何忽略特定屬性通過反射Map解決不同接口參數(shù)使用相同對象展示不同參數(shù)

經(jīng)常遇到的問題

在實(shí)際得開發(fā)過程中,我們經(jīng)常會遇到以下場景,我們后端請求某個(gè)接口后獲取到得數(shù)據(jù),不希望將所有字段都返回給前端,那么我們需要封裝,或者過濾一些不必要得字段后返回給前端。

不完美的解決方案

使用Jackson字段動態(tài)過濾

@JsonIgnore用于忽略序列化和反序列化中使用的邏輯屬性。@JsonIgnore可用于setter、getter或字段。

@JsonIgnoreProperties忽略JSON序列化和反序列化中的指定邏輯屬性。它在類級別進(jìn)行了注釋。

@JsonIgnoreType在類級別進(jìn)行了注釋,它忽略了整個(gè)類。

@JsonInclude(JsonInclude.Include.NON_NULL)屬性為NULL不序列化,即不返回給前端

以上方式都不滿足實(shí)際要求,需要序列化的Property,并非固定的。這次我要id,name,下次我可能要name,score。

通過SimplePropertyPreFilter方式(Json返回)

這種寫法,接口返回類型就要求是Json字符串類型。無法滿足Spring注解@ResponseBody。

場景一:只保留name和sex字段

publicstaticvoidmain(String[]args){

JSONObjectjsonObject=newJSONObject();

jsonObject.put("name","jhon");

jsonObject.put("age",18);

jsonObject.put("sex","男");

jsonObject.put("phone","1111111");

jsonObject.put("email","142");

System.out.println(jsonObject);

//SimplePropertyPreFilterfilter=newSimplePropertyPreFilter("name","sex");

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter();

filter.getIncludes().add("name");

filter.getIncludes().add("sex");

System.out.println(JSONObject.toJSONString(jsonObject,filter));

//或者調(diào)用以下方式

publicstaticStringobject2Json(Objectobject,String...keys){

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter(object.getClass(),keys);

returnJSONObject.toJSONString(object,filter,SerializerFeature.WriteMapNullValue);

場景二:過濾掉email和phone字段

publicstaticvoidmain(String[]args){

JSONObjectjsonObject=newJSONObject();

jsonObject.put("name","jhon");

jsonObject.put("age",18);

jsonObject.put("sex","男");

jsonObject.put("phone","1111111");

jsonObject.put("email","142");

System.out.println(jsonObject);

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter();

filter.getExcludes().add("email");

filter.getExcludes().add("phone");

System.out.println(JSONObject.toJSONString(jsonObject,filter));

}

@ResponseBody返回json如何忽略特定屬性

@RequestBody注解標(biāo)記接收前端傳遞給后端的json數(shù)據(jù),然后轉(zhuǎn)成對象。

@ResponseBody注解標(biāo)記是把后端返回的對象轉(zhuǎn)換成json數(shù)據(jù),然后傳遞給前端。

我們想要的效果是將查詢得到的List對象動態(tài)過濾指定的字段

但實(shí)際上我們得到的對象還會再封裝一層:returnnewIResult(list);

使用AOP,通過自定義注解的方式來控制動態(tài)過濾指定字段。(實(shí)現(xiàn)太麻煩放棄了)

通過反射Map解決

通過反射獲取到該類和所要獲取的字段get方法,保存在一個(gè)map中。但當(dāng)數(shù)據(jù)量大的情況再把對象轉(zhuǎn)換一次map,就會影響接口性能了。(此方式不可?。?/p>

最終解決辦法:定義查詢列表數(shù)據(jù)的接口,用Map來承載,而不是bean。

publicListMapString,Objectlist(Entityentity);

不同接口參數(shù)使用相同對象展示不同參數(shù)

當(dāng)我們在寫接口的時(shí)候,一個(gè)實(shí)體類對象會被多個(gè)接口使用,但每個(gè)接口要求的參數(shù)可能都不一樣。為了接口參數(shù)規(guī)范,于是我們就重寫了多個(gè)實(shí)體類,對應(yīng)不同的接口。(相信很多人目前是偷懶每套業(yè)務(wù)都只用了一個(gè)實(shí)體類對象吧,前端自己挑選所需要的字段)

但是提供給第三方的接口,參數(shù)和結(jié)果字段必須都要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論