最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

FastJson時(shí)間格式化問題避坑經(jīng)驗(yàn)分享

 更新時(shí)間:2022年08月22日 09:49:40   作者:樹洞君  
這篇文章主要為大家介紹了FastJson時(shí)間格式化問題避坑經(jīng)驗(yàn)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題背景

某一天,我們系統(tǒng)服務(wù)的依賴方找到我們,問我們?yōu)槭裁磿r(shí)間類型的字段會(huì)有這種數(shù)據(jù)存在?導(dǎo)致他們解析的時(shí)候報(bào)錯(cuò)。

{"sloganEndtime": "20211-03-10 11:30:00"}
// 字段類型
private Date sloganEndtime;

于是我們開始進(jìn)行排查,最后發(fā)現(xiàn)數(shù)據(jù)源頭來源于一個(gè)導(dǎo)入表格的功能,商家運(yùn)營(yíng)人員在導(dǎo)入數(shù)據(jù)的時(shí)候?qū)戝e(cuò)了,所以導(dǎo)致了非常離譜的問題。

問題復(fù)現(xiàn)

利用原生JDK來轉(zhuǎn)換時(shí)間 代碼截圖如下:會(huì)發(fā)現(xiàn)不會(huì)出現(xiàn)異常

我們換FastJson來嘗試下,代碼如下:發(fā)現(xiàn)會(huì)報(bào)錯(cuò)!

SkuMainBean mainBean = JSON.parseObject("{\"sloganEndTime\":\"20211-03-10
11:30:00\"}", SkuMainBean.class);
System.out.println(mainBean);
# 異常信息
Exception in thread "main" com.alibaba.fastjson.JSONException: For input
string: "20211-03-10 11:30:00"
at
com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONPars
er.java:627)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:361)

為什么FastJson會(huì)出問題

通過跟代碼,我們發(fā)現(xiàn)FastJson有其自己的默認(rèn)時(shí)間格式:

// com.alibaba.fastjson.JSON#DEFFAULT_DATE_FORMAT
public static String DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

但是其使用判斷邏輯是預(yù)先校驗(yàn)了FORMAT與入?yún)⒌拈L(zhǎng)度:

if (strVal.length() == parser.getDateFomartPattern().length()) {
DateFormat dateFormat = parser.getDateFormat();
try {
return (T) dateFormat.parse(strVal);
} catch (ParseException e) {
// skip
}
}
// ....................................
return (T) new java.util.Date(longVal);

解決方案(3種)

1、主動(dòng)增加格式化注解,尤其是需要轉(zhuǎn)換未知的入?yún)r(shí),需要提前確定

@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date sloganEndtime;

2、利用時(shí)間戳(Long)替換Date類型

3、自己的系統(tǒng)在進(jìn)行數(shù)據(jù)傳輸時(shí),保證數(shù)據(jù)的合理性,增加相關(guān)校驗(yàn)

反思

  • 為什么FastJson(1.2.36版本)在使用日期格式化的時(shí)候要預(yù)先校驗(yàn)長(zhǎng)度?

PS:為什么不檢測(cè)無(wú)注解直接轉(zhuǎn)換失???

  • 為什么其他系統(tǒng)在進(jìn)行JSON轉(zhuǎn)換的時(shí)候不給字段主動(dòng)添加格式化注解?
  • 沒有絕對(duì)的答案,因?yàn)槭褂昧?xí)慣和代碼慣性的原因,我們經(jīng)常會(huì)忽略一些已經(jīng)習(xí)以為常的東西,只有做到更加的嚴(yán)謹(jǐn)和周全,才能盡量減少出錯(cuò)的可能性。

以上就是FastJson時(shí)間格式化問題避坑經(jīng)驗(yàn)分享的詳細(xì)內(nèi)容,更多關(guān)于FastJson時(shí)間格式化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解使用Maven開發(fā)Web應(yīng)用詳細(xì)步驟

    詳解使用Maven開發(fā)Web應(yīng)用詳細(xì)步驟

    這篇文章主要介紹了詳解使用Maven開發(fā)Web應(yīng)用詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例

    在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例

    這篇文章主要介紹了在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • java實(shí)現(xiàn)客房管理系統(tǒng)

    java實(shí)現(xiàn)客房管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客房管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Idea2023配置JavaWeb項(xiàng)目(最新)

    Idea2023配置JavaWeb項(xiàng)目(最新)

    本文將介紹如何配置JavaWeb項(xiàng)目,以在Idea中實(shí)現(xiàn)開發(fā)環(huán)境,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • 詳解spring boot中使用JdbcTemplate

    詳解spring boot中使用JdbcTemplate

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務(wù)管理能力。 通過使用SpringBoot自動(dòng)配置功能并代替我們自動(dòng)配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識(shí),一起看看吧
    2017-04-04
  • 如何使用Java生成具有安全哈希的QR碼

    如何使用Java生成具有安全哈希的QR碼

    這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下
    2019-06-06
  • 使用itextpdf操作pdf的實(shí)例講解

    使用itextpdf操作pdf的實(shí)例講解

    下面小編就為大家分享一篇使用itextpdf操作pdf的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Java圖形界面之JFrame,JLabel,JButton詳解

    Java圖形界面之JFrame,JLabel,JButton詳解

    這篇文章主要介紹了Java圖形界面之JFrame、JLabel、JButton詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring中的異步方法@Async失效的原因詳解

    Spring中的異步方法@Async失效的原因詳解

    這篇文章主要介紹了Spring中的異步方法@Async失效的原因詳解,@Async屬于異步注解,@Async放在方法上標(biāo)識(shí)該方法為異步方法,異步是指進(jìn)程不需要一直等待下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài),需要的朋友可以參考下
    2024-01-01
  • Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

三原县| 汽车| 肥城市| 清新县| 汉寿县| 阳东县| 香河县| 深泽县| 桐梓县| 吉林省| 山阳县| 五常市| 鲁山县| 曲靖市| 古浪县| 西华县| 鲁山县| 汕头市| 峨眉山市| 铁岭县| 卓尼县| 兴仁县| 丰宁| 应用必备| 额济纳旗| 宿松县| 张掖市| 玛沁县| 交城县| 祁阳县| 黔西| 仁寿县| 日土县| 阿坝县| 宁武县| 错那县| 枣强县| 香港 | 白银市| 海原县| 宜城市|