



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Java接口返回json如何忽略特定屬性目錄經常遇到的問題不完美的解決方案通過SimplePropertyPreFilter方式(Json返回)場景一:只保留name和sex字段場景二:過濾掉email和phone字段@ResponseBody返回json如何忽略特定屬性通過反射Map解決不同接口參數使用相同對象展示不同參數
經常遇到的問題
在實際得開發過程中,我們經常會遇到以下場景,我們后端請求某個接口后獲取到得數據,不希望將所有字段都返回給前端,那么我們需要封裝,或者過濾一些不必要得字段后返回給前端。
不完美的解決方案
使用Jackson字段動態過濾
@JsonIgnore用于忽略序列化和反序列化中使用的邏輯屬性。@JsonIgnore可用于setter、getter或字段。
@JsonIgnoreProperties忽略JSON序列化和反序列化中的指定邏輯屬性。它在類級別進行了注釋。
@JsonIgnoreType在類級別進行了注釋,它忽略了整個類。
@JsonInclude(JsonInclude.Include.NON_NULL)屬性為NULL不序列化,即不返回給前端
以上方式都不滿足實際要求,需要序列化的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));
//或者調用以下方式
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注解標記接收前端傳遞給后端的json數據,然后轉成對象。
@ResponseBody注解標記是把后端返回的對象轉換成json數據,然后傳遞給前端。
我們想要的效果是將查詢得到的List對象動態過濾指定的字段
但實際上我們得到的對象還會再封裝一層:returnnewIResult(list);
使用AOP,通過自定義注解的方式來控制動態過濾指定字段。(實現太麻煩放棄了)
通過反射Map解決
通過反射獲取到該類和所要獲取的字段get方法,保存在一個map中。但當數據量大的情況再把對象轉換一次map,就會影響接口性能了。(此方式不可取)
最終解決辦法:定義查詢列表數據的接口,用Map來承載,而不是bean。
publicListMapString,Objectlist(Entityentity);
不同接口參數使用相同對象展示不同參數
當我們在寫接口的時候,一個實體類對象會被多個接口使用,但每個接口要求的參數可能都不一樣。為了接口參數規范,于是我們就重寫了多個實體類,對應不同的接口。(相信很多人目前是偷懶每套業務都只用了一個實體類對象吧,前端自己挑選所需要的字段)
但是提供給第三方的接口,參數和結果字段必須都要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論