亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                關于SpringBoot啟用FastJson解析框架,字符串Null需轉(zhuǎn)為空串思路

                一、問題描述

                近期項目開發(fā)過程中,項目使用的是前后端分離架構,前端使用ANT DESIGN VUE,后端采用SpringBoot+Mybatis,數(shù)據(jù)庫使用PG。如果前端定義的VUE變量為空串,后端用實體接收后,保存到數(shù)據(jù)庫中該變量的字段會為空串,而不是NULL,從而出現(xiàn)后端服務在發(fā)起數(shù)據(jù)庫查詢時,用IS NULL條件無法過濾出來字段為空的數(shù)據(jù)記錄問題。

                二、解決思路

                針對上述提到的問題,有兩種方案:

                1、修改前端上送的所有頁面代碼,初始化變量時,將空串‘’全部替換成NULL

                –修改的地方比較多,并且不能確保服務接口類的請求有出現(xiàn)空串,不建議使用

                2、修改后端代碼,在應用請求接收變量映射(將JSON字符串轉(zhuǎn)成JAVA實體)處,統(tǒng)一將空串‘’替換成NULL

                –修改地方比較少,可做到統(tǒng)一控制,兼容前端界面和接口請求,建議使用該方案

                現(xiàn)行項目使用的SpringBoot框架,針對JSON的解析,將Jakson解析統(tǒng)一替換成FastJson,(解決jackson 解析的字段中有單個字母作為駝峰單詞的, 單個字母后面的大寫字母會默認取小寫的, 而不是原樣取值的問題如”wWorkDays”字段,使用jackson解析成JSON字符串時,會變成wworkDays,以致原樣字段無法正確取值和傳送),因此要實現(xiàn)對字符串變量做個性化處理,因此考慮在Fastjson的的反序列化邏輯中添加此處理邏輯,方案如下:

                fastJsonConfig.getParserConfig().putDeserializer(String.class, new ObjectDeserializer() {@Overridepublic T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {if (String.class.equals(type)) {String fieldValue = (String) parser.parse(fieldName);if (StrUtil.isBlank(fieldValue)) {fieldValue = null;}return (T) fieldValue;}return (T) parser.parse(fieldName);}

                最終代碼如下:

                /** * 將SpringBoot的Jakson解析統(tǒng)一替換成FastJson * 以解決jackson 解析的字段中有單個字母作為駝峰單詞的, 單個字母后面的大寫字母會默認取小寫的, 而不是原樣取值的問題 * 如”wWorkDays”字段,使用jackson解析成JSON字符串時,會變成wworkDays,以致原樣字段無法正確取值和傳送 * 使用FastJson可解決該問題 * * @return */@Beanpublic HttpMessageConverters fastJsonHttpMessageConverters() {FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();fastJsonHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());fastJsonHttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8);FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSSXXX”);//全局轉(zhuǎn)化成帶時區(qū)的時間,例如,2021-09-28T09:28:05.000+08:00fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect, //禁用循環(huán)引用SerializerFeature.IgnoreNonFieldGetter,//忽略NULL字段SerializerFeature.WriteDateUseDateFormat//使用統(tǒng)一的時間格式);// 對String變量反序列化進行定制處理,如果字符串為空串,則轉(zhuǎn)為NULL// 注:由于前端定義的字符為空串,發(fā)送到后臺保存到數(shù)據(jù)庫會保存為空串,在PG數(shù)據(jù)庫和MYSQL數(shù)據(jù)庫查詢時用,isNULL無法過濾出來記錄fastJsonConfig.getParserConfig().putDeserializer(String.class, new ObjectDeserializer() {@Overridepublic T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {if (String.class.equals(type)) {String fieldValue = (String) parser.parse(fieldName);if (StrUtil.isBlank(fieldValue)) {fieldValue = null;}return (T) fieldValue;}return (T) parser.parse(fieldName);}@Overridepublic int getFastMatchToken() {return 0;}});fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);return new HttpMessageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8), fastJsonHttpMessageConverter);}/** * 支持的文檔類型 * * @return */private List getSupportedMediaTypes() {List supportedMediaTypes = new ArrayList();supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);supportedMediaTypes.add(MediaType.APPLICATION_JSON);return supportedMediaTypes;}

                三、問題總結

                我們開發(fā)人員在碰到問題時頭腦應該保持冷靜,從了解原理出發(fā),只要解決思路對,總會找到正確的解決之道。

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月15日 06:11
                下一篇 2022年6月15日 06:11

                相關推薦

                • 短視頻策劃內(nèi)容的3個要點(短視頻策劃內(nèi)容怎么做)

                  短視頻在制作時,內(nèi)容框架非常重要。如果直奔主題,然后結束,聚卓告訴你,這樣的短視頻已經(jīng)過時了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 存儲過程語法(sql server存儲過程語法)

                  今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

                  2022年11月26日
                • 馬斯克凌晨一點半曬“代碼審查”現(xiàn)場,編排他的段子比瘋狂星期四還多

                  夢晨 Pine 發(fā)自 凹非寺 量子位 | 公眾號 QbitAI 每一個真正會寫代碼的人,請在下午2點到總部10層報到。 每一個真正會寫代碼的人,請在下午2點到總部10層報到。 馬斯…

                  2022年11月21日
                • gfsoso(gfsoso是什么)

                  eSCIHUB搜索引擎強大無比,只要有網(wǎng)就能下載你要的文獻,無需購買數(shù)據(jù)庫。 說到查資料大家最先想到的是各類搜索引擎提供的數(shù)據(jù)庫,當然百度學術在一定程度上也能完成一些論文的查閱工作…

                  2022年11月16日
                • 短視頻腳本范文(視頻腳本怎么寫)

                  短視頻腳本,是故事的發(fā)展大綱。我們在拍攝視頻前,需要在腳本中確定整個視頻的整體框架。 事件發(fā)生的時間、地點,其中有哪些人物,每個人物有哪些臺詞、動作,每個畫面拍攝的景別分別是什么,…

                  2022年11月13日
                • 網(wǎng)站客服代碼(網(wǎng)站客服代碼實現(xiàn)移動端隱藏,電腦端展開)

                  本文主要講的是網(wǎng)站客服代碼,以及和網(wǎng)站客服代碼實現(xiàn)移動端隱藏,電腦端展開相關的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 在線客服系統(tǒng)代碼是什么? 在線客服系統(tǒng)代碼…

                  2022年11月12日
                • 8字頭股票什么意思(8字頭股票什么意思呀)

                  北京證券交易所股票是以4和8開頭1北京證券交易所是以現(xiàn)有的新三板精選層為基礎組建,進一步提升服務中小企業(yè)的能力,打造服務創(chuàng)新型中小企業(yè)主陣地北京證券交易所是因為我們國家要支持中小企…

                  2022年11月11日
                • 數(shù)據(jù)透視表是干嘛的(透視表excel透視表怎么做)

                  工作中經(jīng)常要對物品進行進銷存管理,今天分享一個簡易的進銷存管理,首先我們在有原始數(shù)據(jù)表,必備的幾列數(shù)據(jù)如下所示: 在類型字段中,我們列出商品是入庫,還是出庫 然后我們可以按CTRL…

                  2022年11月5日
                • 農(nóng)行94賬號是什么意思(農(nóng)行賬號04開頭的是啥)

                  94 交易失敗,請稍后重試重新簽到后再交易或與銀行卡服務中心聯(lián)系;額,跟你基本沒什么關系,一般是批量業(yè)務會用到 ,比如說發(fā)工資什么的;農(nóng)業(yè)銀行存折賬號是17位 其中前兩位是省市代碼…

                  2022年11月4日
                • 收購Twitter后 馬斯克計劃重啟短視頻應用Vine

                  據(jù) Axios 報道,埃隆-馬斯克已經(jīng)要求 Twitter 的工程師們開始開發(fā)短視頻應用 Vine 的新版本,并可能在年底前推出。馬斯克昨天在推特上發(fā)布了一項調(diào)查,詢問他是否應該“…

                  2022年11月1日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息