最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java接口返回json如何忽略特定屬性

 更新時間:2022年09月23日 16:07:15   作者:CNBLOG  
這篇文章主要介紹了Java接口返回json如何忽略特定屬性,通過SimplePropertyPreFilter方式(Json返回),這種寫法,接口返回類型就要求是Json字符串類型,本文通過場景實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下

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

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

不完美的解決方案

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

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

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

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

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

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

通過SimplePropertyPreFilter方式(Json返回)

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

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

public static void main(String[] args) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("name", "jhon");
    jsonObject.put("age", 18);
    jsonObject.put("sex", "男");
    jsonObject.put("phone", "1111111");
    jsonObject.put("email","142qq.com");
    System.out.println(jsonObject);
    // SimplePropertyPreFilter filter = new SimplePropertyPreFilter("name","sex");
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
    filter.getIncludes().add("name");
    filter.getIncludes().add("sex");
    System.out.println(JSONObject.toJSONString(jsonObject, filter));
}
// 或者調(diào)用以下方式
public static String object2Json(Object object, String... keys) {
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter(object.getClass(),keys);
    return JSONObject.toJSONString(object,filter, SerializerFeature.WriteMapNullValue);
}

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

public static void main(String[] args) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("name", "jhon");
    jsonObject.put("age", 18);
    jsonObject.put("sex", "男");
    jsonObject.put("phone", "1111111");
    jsonObject.put("email","142qq.com");
    System.out.println(jsonObject);
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
    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í)際上我們得到的對象還會再封裝一層:return new IResult(list);

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

通過反射Map解決

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

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

public List<Map<String,Object>> list(Entity entity);

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

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

但是提供給第三方的接口,參數(shù)和結(jié)果字段必須都要求規(guī)范起來,否則等著被噴了。

Swagger2實(shí)現(xiàn)參數(shù)使用相同對象展示不同參數(shù),可以用分組方式實(shí)現(xiàn),但用起來也比較麻煩。

還會遇到每個接口需要做字段校驗(yàn)@Valid,又是麻煩的一批。

最終發(fā)現(xiàn)還是多寫幾個實(shí)體類更快更規(guī)范此,且針對不同接口的參數(shù)也更便于管理。

到此這篇關(guān)于Java接口返回json如何忽略特定屬性的文章就介紹到這了,更多相關(guān)Java接口返回json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot接收各種各樣參數(shù)的示例詳解

    SpringBoot接收各種各樣參數(shù)的示例詳解

    參數(shù)映射準(zhǔn)確來說是springmvc來幫我們干的活,但是由于springboot太過火爆,簡化了springmvc相關(guān)配置文件,以至于很多人會誤認(rèn)為是springboot的功能,本文將給大家介紹SpringBoot接收各種各樣參數(shù),文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2024-04-04
  • mybatis如何批量添加一對多中間表

    mybatis如何批量添加一對多中間表

    這篇文章主要介紹了mybatis如何批量添加一對多中間表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法

    java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法

    現(xiàn)在遇到一個項(xiàng)目,移動設(shè)備存儲數(shù)據(jù),然后一起上傳,那就出現(xiàn)了許多重復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法,需要的朋友可以參考下
    2021-11-11
  • Springboot常用方法參數(shù)注解示例詳解

    Springboot常用方法參數(shù)注解示例詳解

    這篇文章主要介紹了Springboot常用方法參數(shù)注解及示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Struts1簡介和入門_動力節(jié)點(diǎn)Java學(xué)院整理

    Struts1簡介和入門_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Struts1簡介和入門的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Seata分布式事務(wù)出現(xiàn)ABA問題解決

    Seata分布式事務(wù)出現(xiàn)ABA問題解決

    這篇文章主要為大家介紹了Seata分布式事務(wù)出現(xiàn)ABA問題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解Spring Batch 輕量級批處理框架實(shí)踐

    詳解Spring Batch 輕量級批處理框架實(shí)踐

    這篇文章主要介紹了詳解Spring Batch 輕量級批處理框架實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java程序員容易犯的10大低級錯誤

    Java程序員容易犯的10大低級錯誤

    這篇文章主要介紹了Java程序員容易犯的10大低級錯誤,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 詳解SpringBoot2 使用Spring Session集群

    詳解SpringBoot2 使用Spring Session集群

    這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • 解決idea使用maven編譯正常但是運(yùn)行項(xiàng)目時卻提示很多jar包找不到的問題

    解決idea使用maven編譯正常但是運(yùn)行項(xiàng)目時卻提示很多jar包找不到的問題

    這篇文章主要介紹了解決idea使用maven編譯正常但是運(yùn)行項(xiàng)目時卻提示很多jar包找不到的問題,本文分多種情形給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

承德县| 无极县| 香格里拉县| 宾阳县| 大兴区| 临沧市| 宁城县| 庆安县| 石台县| 仁化县| 岳阳市| 万山特区| 张家口市| 武安市| 乌什县| 巍山| 静乐县| 正镶白旗| 济宁市| 连平县| 内乡县| 昆山市| 翼城县| 玛多县| 东兰县| 横峰县| 盖州市| 怀安县| 游戏| 方山县| 观塘区| 墨竹工卡县| 永寿县| 茶陵县| 上虞市| 葵青区| 浦县| 新巴尔虎右旗| 武邑县| 鲁甸县| 大石桥市|