Java接口過濾為null的字段方式
一、問題描述
今天在大C的同學(xué)找過來給我們提了個技術(shù)需求,讓我們將接口里返回的字段全不做一下處理,若字段值為 "null" 的時候就不要返回了,他們APP會崩潰。
what ?
我想大家立刻馬上會冒出這樣一個問題之前不是好好的么這么突然就G了。經(jīng)過一陣交流才發(fā)現(xiàn)是技術(shù)加方案變化導(dǎo)致的。
二、問題原因
根本原因就是大C要做技術(shù)優(yōu)化,從之前的php代碼遷移到 golang,老的php代碼在他們那一層做了一個“字端為null就不返回”的過濾。
本次技術(shù)優(yōu)化之后不想做這件事。
老的技術(shù)方案實現(xiàn)如下:

新的技術(shù)方案實現(xiàn)如下:

三、解決方案
業(yè)務(wù)架構(gòu)解決規(guī)范性討論
解決方案從團隊角度來說無非就兩種,一個就是他們做,另一個就是我們業(yè)務(wù)方做。我個人覺得的他們做更合適。
- 首先技術(shù)優(yōu)化可以做,但是前提不能影響之前的功能性的東西,不然所有的接入放都要進行適配。對接放愿不愿意改是一回,有沒有時間是另一回事。
- 大C對客戶端負責(zé),就一定要保證對客戶端的字段的準確性,其實就是三方接口不可信。
- 大C來做這件事的話其他業(yè)務(wù)方都不用做重復(fù)性的動作了,這樣架構(gòu)也簡潔。
- 若是業(yè)務(wù)放來做,怎么做,做到什么力度也是個問題,不可能在全局做這樣的邏輯處理,除非對大C是一個API。但是顯然不可能出現(xiàn)這樣的架構(gòu)設(shè)計。舉個case:一個接口給大C提供了并且做了這個邏輯判斷,但是某一天有個同學(xué)給大C提供了個新接口沒有人提醒他做這樣的邏輯處理,測試的時候各個字段都有,結(jié)果上線之后由于業(yè)務(wù)變化某個字段值沒有了,客戶端不就G了么。
業(yè)務(wù)放的解決方案
若是業(yè)務(wù)方做這件事的話,有兩種方式。
1、按照接口返回對象過濾,使用JsonInclude注解,該注解可作用在字段上也可作用在對象上。
# 引的包 import com.fasterxml.jackson.annotation.JsonInclude; # 具體注解 @JsonInclude(JsonInclude.Include.NON_NULL)
2、按照全局過濾使用配置。
spring:
jackson:
default-property-inclusion: non_null具體采用哪種方式大家視情況而定。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java?GUI實現(xiàn)學(xué)生成績管理系統(tǒng)
這篇文章主要為大家詳細介紹了Java?GUI實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Java中HashMap和TreeMap的區(qū)別深入理解
首先介紹一下什么是Map。在數(shù)組中我們是通過數(shù)組下標來對其內(nèi)容索引的,而在Map中我們通過對象來對對象進行索引,用來索引的對象叫做key,其對應(yīng)的對象叫做value2012-12-12
Java實現(xiàn)的時間戳與date對象相互轉(zhuǎn)換功能示例
這篇文章主要介紹了Java實現(xiàn)的時間戳與date對象相互轉(zhuǎn)換功能,結(jié)合具體實例形式分析了java日期與時間戳類型的表示與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Spring事件監(jiān)聽器ApplicationListener的使用與原理分析
文章介紹了Spring中的事件監(jiān)聽器和事件發(fā)布機制,包括內(nèi)置事件的使用和自定義事件的創(chuàng)建與發(fā)布,以及如何使用@EventListener注解進行事件監(jiān)聽,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2025-11-11
解決Springboot配置excludePathPatterns不生效的問題
這篇文章主要介紹了解決Springboot配置excludePathPatterns不生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

