springboot2.x Jackson自定義序列化,優(yōu)雅實現(xiàn)String、List、Object返回""、[]、{}

前言

近期正好有個項目,客戶端同學(xué)要求所有json字段都必須得給,還必須得初始化。如空String返回""、空Array、Collection返回[]、空Boolean返回false、Object空對象返回{},等等。

空對象這塊確實不好處理,反序列化遇到類型擦除問題,網(wǎng)上找了一大圈基本都沒有一個可靠的解決方案。但是,又不想在代碼硬編碼判斷對象為空時把這個對象初始化,這樣不太優(yōu)雅。因此,想基于自定義JacksonHttpMessageConverter帶注解的方式來巧妙的實現(xiàn)。廢話不多說,我們上代碼??!

實現(xiàn)方式

先定義一個枚舉類型,表示需要處理的方式

然后定義一個注解,以便當(dāng)對象為null時,返回自動加上花括號"{}"。

然后自定義JacksonHttpMessageConverter集成MappingJackson2HttpMessageConverter來實現(xiàn)個性化序列化。花括號"{}"的核心實現(xiàn)代碼如下:

最后,在需要加花括號"{}"的字段上加上@JacksonFill(FillTypeEnum.BRACE)主鍵。

日期格式化及時區(qū)設(shè)置

最終,我們實現(xiàn)效果如下:

結(jié)束語

筆者也嘗試過使用fastjson替代jackson的方案,fastjson支持WriteMapNullValue、WriteNullListAsEmpty、WriteNullStringAsEmpty、WriteNullNumberAsZero等。但同樣Object的也需要自己個性化處理,在實體類字段直接初始化也是一種解決辦法,但fastjson在兼容性上跟jackson比會有些問題,如二進(jìn)制序列號。所以,嘗試了一種新的解決思路。

具體代碼見:https://github.com/daoshenzzg/springboot2.x-example

本系列文章

springboot2.x Jackson自定義序列化,優(yōu)雅實現(xiàn)String、List、Object返回""、[]、{}

springboot2.x 集成 Mybatis plus(多數(shù)據(jù)源),提升20%的開發(fā)效率

springboot2.x 全局異常處理正確方式

springboot2.x 如何優(yōu)雅的實現(xiàn)API輸出?

如何優(yōu)雅的實現(xiàn)數(shù)據(jù)置頂、置尾、交換、拖動排序?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容