国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【fastjson2.x 記錄】那些從1.x升級(jí)到2.x踩過的坑

這篇具有很好參考價(jià)值的文章主要介紹了【fastjson2.x 記錄】那些從1.x升級(jí)到2.x踩過的坑。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這篇文章主要記錄升級(jí)到 fastjson2.x 版本后出現(xiàn)的一些問題?

1. jar 包引入問題

問題描述:從 2.x 版本后,fastjson 貌似開始對(duì)代碼模塊進(jìn)行了拆分,所以在調(diào)整配置的時(shí)候,會(huì)發(fā)現(xiàn)有些類突然沒了,其實(shí)是需要引入其他的擴(kuò)展包。

從 2.0.22 版本開始,需要引入下面三個(gè) jar 包

    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2-extension</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2-extension-spring5</artifactId>
    </dependency>

起初的 2.x 版本,只需要引入前兩個(gè) jar 包,后面想更新一下新版本,好家伙,又分出來一個(gè)?fastjson2-extension-spring5,其實(shí)就是將 spring 的一些相關(guān)的配置類獨(dú)立出來了。

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

?用的最多應(yīng)該是 redis 的序列化類,還有 http 的消息解析器。

2. 自定義序列化?ObjectWriter 類的 writeXXX 方法問題

問題描述:1.x 版本中?SerializeWriter 的 write 方法,在 2.x 版本中?ObjectWriter 并沒有提供,反而提供很多不同的 writeXXX 方法,匹配不同的返回類型,如 writeString 方法,就會(huì)返回一個(gè)字符類型。

之前系統(tǒng)使用 1.2.83 版本,寫了一個(gè) LocalDateTime 序列化為時(shí)間戳毫秒數(shù)的自定義序列化類,使用的是?SerializeWriter 的 write 方法。

public class DateJsonSerializer implements ObjectSerializer {

    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
        SerializeWriter out = serializer.getWriter();
        if (object == null) {
            serializer.getWriter().writeNull();
            return;
        }
        if (object instanceof LocalDateTime) {
            LocalDateTime localDateTime = (LocalDateTime) object;
            out.write(localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() + "");
        }
    }
}

控制器測(cè)試代碼如下

    @GetMapping("/test")
    public DemoTestResponse test() {

        DemoTestResponse response = new DemoTestResponse();

        response.setDateTime(LocalDateTime.now());

        return response;
    }

返回對(duì)象如下

@Data
public class DemoTestResponse {

    @JSONField(name = "date_time", serializeUsing = DateJsonSerializer.class)
    private LocalDateTime dateTime;

}

postman 運(yùn)行后結(jié)果如下,可以看到自定義序列化生效了,并且返回了數(shù)字型的時(shí)間戳。

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

?升級(jí)到 2.x 版本后,重寫了這個(gè)自定義序列化類,如下

public class DateJsonSerializer implements ObjectWriter {

    @Override
    public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
        if (object == null) {
            jsonWriter.writeNull();
            return;
        }

        if (object instanceof LocalDateTime) {
            LocalDateTime localDateTime = (LocalDateTime) object;
            jsonWriter.writeString(localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli()+"");
        }
    }
}

這里使用了 JSONWriter 的 writeString 方法,這也是問題所在,還是運(yùn)行上面的方法,返回結(jié)果如下,變?yōu)榱艘粋€(gè)字符串了。

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

因?yàn)楫?dāng)時(shí)沒留意,所以就以為 writeString 的意思是參數(shù)為字符串類型就用了。其實(shí)?JSONWriter?類提供了很多的 writeXXX 方法。fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

?這里我們應(yīng)該使用 writeMillis 方法,如下圖

    @Override
    public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) {
        if (object == null) {
            jsonWriter.writeNull();
            return;
        }

        if (object instanceof LocalDateTime) {
            LocalDateTime localDateTime = (LocalDateTime) object;
            jsonWriter.writeMillis(localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());
        }
    }

運(yùn)行結(jié)果如下,問題解決。?

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

3.?JSONField 注解智能匹配失效

問題描述:在使用 1.x 版本時(shí),字段使用的@JSONField(name = "openid"),前端傳過來的字段名為 open_id,接口能正常運(yùn)行。但是升級(jí)到 2.x 版本時(shí),就為空值。

這是一個(gè)隱藏很深的bug,估計(jì)是當(dāng)時(shí)開發(fā)接口的時(shí)候也沒有注意,接口已能夠正常運(yùn)行。但是升級(jí)到 2.x 版本時(shí),就出問題了。

其實(shí)這得益于 fastjson 的智能匹配,忽略了大小寫和下劃線,依然將 json 映射成功。但是在 2.x 版本后,貌似智能匹配并沒有默認(rèn)開啟,所以就出現(xiàn)映射不成功的情況。

筆者嘗試使用 開啟智能匹配,但是沒有成功,原因未明,先記錄下來,后面有時(shí)間去看一下源碼。從官網(wǎng)的 Issues 來看,也有不少這種序列化和反序列化的問題,先版本的更新也針對(duì)這種情況的比較多。

請(qǐng)求接收的 bean 如下,使用?JSONReader.Feature.SupportSmartMatch ,依舊是使用 openid 這個(gè)字段名稱。

@Data
public class XcUserEquityRequest {


    @JSONField(name = "app_id")
    private String appId;


    @JSONField(name = "openid", deserializeFeatures= JSONReader.Feature.SupportSmartMatch)
    private String openId;
}

請(qǐng)求的時(shí)候,依舊使用 open_id 下劃線的形式。

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

?但是接口映射的openid字段為空。

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言

官方對(duì) SupportSmartMatch 的說明如下,

fastjson版本升級(jí)問題,springboot進(jìn)階應(yīng)用,java,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-642036.html

到了這里,關(guān)于【fastjson2.x 記錄】那些從1.x升級(jí)到2.x踩過的坑的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 掃碼跳轉(zhuǎn)小程序終極方案,詳細(xì)記錄踩過的坑!不信進(jìn)來看!掃描普通二維碼進(jìn)入小程序功能記錄(兩種方式)

    掃碼跳轉(zhuǎn)小程序終極方案,詳細(xì)記錄踩過的坑!不信進(jìn)來看!掃描普通二維碼進(jìn)入小程序功能記錄(兩種方式)

    小程序管理平臺(tái) :https://mp.weixin.qq.com/ 選擇 :開發(fā)管理-開發(fā)設(shè)置-掃普通鏈接二維碼打開小程序 校驗(yàn)文件 點(diǎn)擊添加進(jìn)入配置頁面 ?。?!還有一個(gè)校驗(yàn)文件,這個(gè)必須扔到服務(wù)器上面,放在域名下根目錄即可,只要在二維碼規(guī)則下的地址可以訪問到即可 放在域名下根目錄即可

    2024年02月13日
    瀏覽(87)
  • MongoDB踩過的坑

    MongoDB踩過的坑

    目錄 ‘mongodump‘ 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件 備份數(shù)據(jù)庫 啟動(dòng)MongoDB服務(wù) 可視化工具:MongoDB Compass 由于目標(biāo)計(jì)算機(jī)積極拒絕,無法連接 ?BSONObj size: xxxx is invalid. Size must be between 0 and 16793600 (16MB) mongodb默認(rèn)時(shí)沒有mogodump.exe工具和mongorestore.exe工具

    2024年02月16日
    瀏覽(20)
  • 安裝whisper模塊踩過的坑

    安裝whisper模塊踩過的坑

    如果你和我一樣,通過以下命令安裝whisper 但卻出現(xiàn)了 fatal: unable to access \\\'https://github.com/openai/whisper.git/\\\': OpenSSL SSL_read: Connection was reset, errno 10054 那么只需要 在運(yùn)行 pip install 之前在運(yùn)行以下的命令,再次重新 pip install ... 即可 原因: 安裝whisper需要先安裝rust環(huán)境依賴。 官方在

    2024年02月15日
    瀏覽(25)
  • docker+selenium+firefox | 我踩過的坑

    為了實(shí)現(xiàn)SSPUBot不在我電腦上部署,我只能將其制成Docker。 要知道SSPUBot在開發(fā)的時(shí)候用了selenium+Firefox的想法開發(fā),所以Docker里面必須要有Firefox,結(jié)果這就讓見識(shí)到了最頑固的錯(cuò)誤 selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 255 我們還是省略我找的

    2024年01月22日
    瀏覽(20)
  • 關(guān)于python的mediapipe庫踩過的坑

    關(guān)于python的mediapipe庫踩過的坑

    ??大家好,我是csdn的博主: lqj_本人 這是我的個(gè)人博客主頁: lqj_本人的博客_CSDN博客-微信小程序,前端,vue領(lǐng)域博主 lqj_本人擅長微信小程序,前端,vue,等方面的知識(shí) https://blog.csdn.net/lbcyllqj?spm=1000.2115.3001.5343 嗶哩嗶哩歡迎關(guān)注: 小淼前端 小淼前端的個(gè)人空間_嗶哩嗶哩_bilibil

    2024年01月17日
    瀏覽(26)
  • visionPro通過網(wǎng)線連接??迪鄼C(jī)踩過的坑
  • 一卡通水控電控開發(fā)踩過的坑

    一卡通水控電控開發(fā)踩過的坑

    最近在做一個(gè)項(xiàng)目,是對(duì)接一卡通設(shè)備的。我一開始只拿到設(shè)備和3個(gè)文檔開局。不知道從哪下手。一步一步踩坑過來。踩了很多沒有必要的坑,寫出來給有用的人吧。 有個(gè)讀卡器,一開始什么軟件也不提供。我都不知道是干嘛用的。后來問客服才知道有一個(gè)測(cè)試軟件。我真

    2024年01月23日
    瀏覽(28)
  • hql(hive sql)中的join及踩過的坑

    1 幾種join方式 join join 對(duì)應(yīng)于 inner join 內(nèi)連接。 當(dāng)多張表進(jìn)行 join 的時(shí)候,所有表中與 on 條件中匹配的數(shù)據(jù)才會(huì)顯示。 hql (即 hive sql )的 on 子句中只支持 and ,不支持 or ,也不支持 null 的對(duì)比。 left outer join 左外連接,也稱為左連接。 以左表為基準(zhǔn),如果右表有條件匹配

    2024年01月21日
    瀏覽(23)
  • 「AntV」X6開發(fā)實(shí)踐:踩過的坑與解決方案

    「AntV」X6開發(fā)實(shí)踐:踩過的坑與解決方案

    長期更新版文檔請(qǐng)移步語雀(「AntV」X6開發(fā)實(shí)踐:踩過的坑與解決方案 (yuque.com)) --Recent update:2024-01-05 相信你們?cè)陂_發(fā)中更多的需求是需要自定義拖拽源,畢竟自定義的功能擴(kuò)展性高一些,而且可以根據(jù)你的業(yè)務(wù)需求靈活設(shè)置。自定義拖拽的優(yōu)點(diǎn)就是:萬物皆可成為拖拽源,

    2024年02月08日
    瀏覽(22)
  • 嵌入式-stm32重要基礎(chǔ)知識(shí)(及踩過的坑)

    嵌入式-stm32重要基礎(chǔ)知識(shí)(及踩過的坑)

    1、固件庫: 固件庫就是函數(shù)的集合,固件庫函數(shù)的作用是向下負(fù)責(zé)與寄存器直接打交道, 向上提供用戶函數(shù)調(diào)用的接口(API)。 2、CMSIS標(biāo)準(zhǔn)與固件庫的關(guān)系 就是對(duì)固件庫函數(shù)的要求。 ARM 公司為了能讓不同的芯片公司生產(chǎn)的 Cortex-M3 芯片能在軟件上基本兼容,和芯片生產(chǎn)商

    2024年02月04日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包