在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

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

    一、問題描述

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

    二、解決思路

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

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

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

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

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

    現(xiàn)行項(xiàng)目使用的SpringBoot框架,針對JSON的解析,將Jakson解析統(tǒng)一替換成FastJson,(解決jackson 解析的字段中有單個字母作為駝峰單詞的, 單個字母后面的大寫字母會默認(rèn)取小寫的, 而不是原樣取值的問題如”wWorkDays”字段,使用jackson解析成JSON字符串時,會變成wworkDays,以致原樣字段無法正確取值和傳送),因此要實(shí)現(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 解析的字段中有單個字母作為駝峰單詞的, 單個字母后面的大寫字母會默認(rèn)取小寫的, 而不是原樣取值的問題 * 如”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變量反序列化進(jìn)行定制處理,如果字符串為空串,則轉(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;}

    三、問題總結(jié)

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

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

    相關(guān)推薦

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

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

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

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

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

      夢晨 Pine 發(fā)自 凹非寺 量子位 | 公眾號 QbitAI 每一個真正會寫代碼的人,請?jiān)谙挛?點(diǎn)到總部10層報(bào)到。 每一個真正會寫代碼的人,請?jiān)谙挛?點(diǎn)到總部10層報(bào)到。 馬斯…

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

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

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

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

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

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

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

      北京證券交易所股票是以4和8開頭1北京證券交易所是以現(xiàn)有的新三板精選層為基礎(chǔ)組建,進(jìn)一步提升服務(wù)中小企業(yè)的能力,打造服務(wù)創(chuàng)新型中小企業(yè)主陣地北京證券交易所是因?yàn)槲覀儑乙С种行∑蟆?/p>

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

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

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

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

      2022年11月4日
    • 收購Twitter后 馬斯克計(jì)劃重啟短視頻應(yīng)用Vine

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

      2022年11月1日

    聯(lián)系我們

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