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

淺析fastjson2時間序列化和反序列化的簡單使用

 更新時間:2025年01月02日 10:45:52   作者:pzzhao  
在項目中將fastjson升級為fastjson2后,我們遇到了一些與fastjson不完全兼容的問題,所以本文就來探討下fastjson2的時間序列化和反序列化的簡單使用吧

在項目中將fastjson升級為fastjson2后,我們遇到了一些與fastjson不完全兼容的問題。本文將探討下fastjson2的時間序列化和反序列化的簡單使用。

時間序列化

fastjson2中,若要將Java對象中的時間屬性序列化為JSON字符串,需使用@JSONField注解指定時間格式,或在序列化時通過方法參數(shù)傳入格式。

// 使用注解指定格式
@JSONField(format = "yyyy-MM-dd")
private Date dateField;
 
// 或者在序列化時通過方法參數(shù)傳入格式
String jsonString = JSON.toJSONString(bean, "yyyy-MM-dd");

時間反序列化

與序列化類似,將日期字符串反序列化為Java對象中的時間屬性時,同樣可通過@JSONField注解或方法參數(shù)指定時間格式。

// 使用注解指定格式
@JSONField(format = "yyyy-MM-dd")
private Date dateField;
 
// 或者在反序列化時通過方法參數(shù)傳入格式
Bean bean = JSON.parseObject(jsonString, Bean.class, "yyyy-MM-dd");

fastjson2的默認(rèn)時間格式

在序列化時間時,默認(rèn)格式為yyyy-MM-dd HH:mm:ss.SSS,這與Jackson和fastjson v1的默認(rèn)13位毫秒值時間戳格式有所不同。

fastjson2支持配置全局默認(rèn)時間格式,

  • 序列化默認(rèn)時間格式可通過JSON.configWriterDateFormat(format)設(shè)置。
  • 反序列化默認(rèn)時間格式可通過JSON.configReaderDateFormat(format)設(shè)置。

其中format值可以參考下文中的 format說明。

fastjson2的隱藏功能

默認(rèn)兼容Jackson、Gson以及fastjson的注解,新一些的版本支持通過配置關(guān)閉JacksonGson的注解兼容,fastjson不支持關(guān)閉(也說不定后面會支持、畢竟JacksonGson也是后面的版本才添加的支持配置關(guān)閉兼容)。

翻了下fastjson2的源碼,jackson的30多個注解基本都支持了,但是這個在官方文檔中卻沒有任何說明。

格式化優(yōu)先級

在fastjson2中,時間格式的優(yōu)先級為:JSONField.format > 方法參數(shù)format > 全局配置。

format說明

  • iso8601:遵循ISO 8601標(biāo)準(zhǔn)格式,如2024-12-27T11:22:48.404+08:00。
  • millis:13位時間戳,。
  • unixtime:10位時間戳,。
  • 其他格式:遵循Java的SimpleDateFormat標(biāo)準(zhǔn),如yyyy-MM-dd HH:mm:ss。

時間格式化組件

以下列出了Java日期和時間格式化中常用的組件及其含義:

特別注意,這里是區(qū)分大小寫字母的,比如yY在日期格式化中有不同含義,y表示當(dāng)前日期歸屬年份,而Y表示當(dāng)前周歸屬的年份,這在年末時可能導(dǎo)致日期顯示錯誤。

組件描述格式示例
G年代指示符文本AD(公元)
y年份年份1996;96
Y周年份(基于周計算)年份2009;09
M年中的月份(上下文敏感)月份July;Jul;07
L年中的月份(獨立形式)月份July;Jul;07
w年中的周數(shù)數(shù)字27
W月中的周數(shù)數(shù)字2
D年中的天數(shù)數(shù)字189
d月中的天數(shù)數(shù)字10
F月中的星期天數(shù)數(shù)字2
E星期中的天數(shù)名稱文本Tuesday;Tue
u星期中的天數(shù)編號(1=星期一,...,7=星期日)數(shù)字1
a上午/下午標(biāo)記文本PM
H一天中的小時(0-23)數(shù)字0
k一天中的小時(1-24)數(shù)字24
K上/下午中的小時(0-11)數(shù)字0
h上/下午中的小時(1-12)數(shù)字12
m小時中的分鐘數(shù)字30
s分鐘中的秒數(shù)字55
S毫秒數(shù)字978
z時區(qū)一般時區(qū)Pacific Standard Time;PST;GMT-08:00
Z時區(qū)RFC 822時區(qū)-0800
X時區(qū)ISO 8601時區(qū)-08;-0800;-08:00

時間格式化組件說明

代碼示例

以下是使用fastjson2進行時間序列化和反序列化的示例代碼。

代碼中用到的fastjson版本是 1.2.83,fastjson2版本是2.0.53。

fastjson2 Maven依賴:

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

fastjson Maven依賴:

<dependency>  
    <groupId>com.alibaba</groupId>  
    <artifactId>fastjson</artifactId>  
    <version>1.2.83</version>  
</dependency>

測試類

public class DemoTest {  
  
    public static void main(String[] args) {  
        //序列化  
        testToJSONString();  
        //fastjson 序列化 和2進行一個對比  
        testFastJson1ToJSON();  
        //解析為java對象  
        testParseObject();  
    }  
  
    private static void testToJSONString() {  
        Date now = new Date();  
        Bean bean = new Bean();  
        bean.setUnixTimeDate(now);  
        bean.setIso8601Date(now);  
        bean.setMillisDate(now);  
        bean.setDefaultDate(now);  
        bean.setDataFormatDate(now);  
        System.out.println("fastjson2 全局配置format前序列化結(jié)果");  
        System.out.println(JSON.toJSONString(bean));  
  
        String format = "millis";  
        JSON.configWriterDateFormat(format);  
        System.out.println("fastjson2 全局配置format后序列化結(jié)果");  
        System.out.println(JSON.toJSONString(bean));  
  
        System.out.println("fastjson2 方法傳入format序列化結(jié)果");  
        System.out.println(JSON.toJSONString(bean,"yyyyMMdd"));  
    }  
  
    private static void testFastJson1ToJSON() {  
        Date now = new Date();  
        Bean1 bean1 = new Bean1();  
        bean1.setUnixTimeDate(now);  
        bean1.setIso8601Date(now);  
        bean1.setMillisDate(now);  
        bean1.setDefaultDate(now);  
        System.out.println("fastjson 序列化結(jié)果");  
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(bean1));  
    }  
  
    private static void testParseObject() {  
        String json = "{\n" +  
                "    \"dataFormatDate\": \"2024-12-27 10:50:31\",\n" +  
                "    \"defaultDate\": \"2024-12-27 10:50:31.555\",\n" +  
                "    \"iso8601Date\": \"2024-12-27T10:50:31.555+08:00\",\n" +  
                "    \"millisDate\": 1735267831555,\n" +  
                "    \"unixTimeDate\": 1735267831\n" +  
                "}";  
        Bean yyyyMMdd = JSON.parseObject(json, Bean.class);  
        System.out.println("fastjson2 反序列化結(jié)果: " + yyyyMMdd.toString());  
    }  
}

fastjson2的測試bean類

public class Bean {  
  
    @JSONField(format = "millis")  
    private Date millisDate;  
    @JSONField(format = "unixtime")  
    private Date unixTimeDate;  
    @JSONField(format = "iso8601")  
    private Date iso8601Date;  
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")  
    private Date dataFormatDate;  
  
    private Date defaultDate;  
  
    public Date getDataFormatDate() {  
        return dataFormatDate;  
    }  
  
    public void setDataFormatDate(Date dataFormatDate) {  
        this.dataFormatDate = dataFormatDate;  
    }  
  
    public Date getMillisDate() {  
        return millisDate;  
    }  
  
    public void setMillisDate(Date millisDate) {  
        this.millisDate = millisDate;  
    }  
  
    public Date getUnixTimeDate() {  
        return unixTimeDate;  
    }  
  
    public void setUnixTimeDate(Date unixTimeDate) {  
        this.unixTimeDate = unixTimeDate;  
    }  
  
    public Date getIso8601Date() {  
        return iso8601Date;  
    }  
  
    public void setIso8601Date(Date iso8601Date) {  
        this.iso8601Date = iso8601Date;  
    }  
  
    public Date getDefaultDate() {  
        return defaultDate;  
    }  
  
    public void setDefaultDate(Date defaultDate) {  
        this.defaultDate = defaultDate;  
    }  
  
    @Override  
    public String toString() {  
        return "Bean{" +  
                "millisDate=" + millisDate +  
                ", unixTimeDate=" + unixTimeDate +  
                ", iso8601Date=" + iso8601Date +  
                ", dataFormatDate=" + dataFormatDate +  
                ", defaultDate=" + defaultDate +  
                '}';  
    }  
}

fastjson的測試類

public class Bean1 {  
  
    @JSONField(format = "millis")  
    private Date millisDate;  
    @JSONField(format = "unixtime")  
    private Date unixTimeDate;  
//    @JSONField(format = "iso8601")  
    @JSONField(serialzeFeatures = SerializerFeature.UseISO8601DateFormat)  
    private Date iso8601Date;  
  
    private Date defaultDate;  
  
    public Date getMillisDate() {  
        return millisDate;  
    }  
  
    public void setMillisDate(Date millisDate) {  
        this.millisDate = millisDate;  
    }  
  
    public Date getUnixTimeDate() {  
        return unixTimeDate;  
    }  
  
    public void setUnixTimeDate(Date unixTimeDate) {  
        this.unixTimeDate = unixTimeDate;  
    }  
  
    public Date getIso8601Date() {  
        return iso8601Date;  
    }  
  
    public void setIso8601Date(Date iso8601Date) {  
        this.iso8601Date = iso8601Date;  
    }  
  
    public Date getDefaultDate() {  
        return defaultDate;  
    }  
  
    public void setDefaultDate(Date defaultDate) {  
        this.defaultDate = defaultDate;  
    }  
  
    @Override  
    public String toString() {  
        return "Bean1{" +  
                "millisDate=" + millisDate +  
                ", unixTimeDate=" + unixTimeDate +  
                ", iso8601Date=" + iso8601Date +  
                ", defaultDate=" + defaultDate +  
                '}';  
    }  
}

運行結(jié)果

fastjson2 全局配置format前序列化結(jié)果
{"dataFormatDate":"2024-12-27 11:22:48","defaultDate":"2024-12-27 11:22:48.404","iso8601Date":"2024-12-27T11:22:48.404+08:00","millisDate":1735269768404,"unixTimeDate":1735269768}

fastjson2 全局配置format后序列化結(jié)果
{"dataFormatDate":"2024-12-27 11:22:48","defaultDate":1735269768404,"iso8601Date":"2024-12-27T11:22:48.404+08:00","millisDate":1735269768404,"unixTimeDate":1735269768}

fastjson2 方法傳入format序列化結(jié)果
{"dataFormatDate":"2024-12-27 11:22:48","defaultDate":"20241227","iso8601Date":"2024-12-27T11:22:48.404+08:00","millisDate":1735269768404,"unixTimeDate":1735269768}

fastjson 序列化結(jié)果
{"defaultDate":1735269768823,"iso8601Date":1735269768823,"millisDate":1735269768823,"unixTimeDate":1735269768}
fastjson2 反序列化結(jié)果: Bean{millisDate=Fri Dec 27 10:50:31 CST 2024, unixTimeDate=Fri Dec 27 10:50:31 CST 2024, iso8601Date=Fri Dec 27 10:50:31 CST 2024, dataFormatDate=Fri Dec 27 10:50:31 CST 2024, defaultDate=Fri Dec 27 10:50:31 CST 2024}

到此這篇關(guān)于淺析fastjson2時間序列化和反序列化的簡單使用的文章就介紹到這了,更多相關(guān)fastjson2時間序列化和反序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis實現(xiàn)批量插入方法實例

    MyBatis實現(xiàn)批量插入方法實例

    最近在公司項目開發(fā)中遇到批量數(shù)據(jù)插入或者更新,下面這篇文章主要給大家介紹了關(guān)于MyBatis實現(xiàn)批量插入的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • SpringBoot實現(xiàn)釘釘機器人消息推送的示例代碼

    SpringBoot實現(xiàn)釘釘機器人消息推送的示例代碼

    這篇文章主要介紹了SpringBoot實現(xiàn)釘釘機器人消息推送的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • java連連看游戲菜單設(shè)計

    java連連看游戲菜單設(shè)計

    這篇文章主要為大家詳細(xì)介紹了java連連看游戲菜單部分的設(shè)計代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 關(guān)于Java中finalize析構(gòu)方法的作用詳解

    關(guān)于Java中finalize析構(gòu)方法的作用詳解

    構(gòu)造方法用于創(chuàng)建和初始化類對象,也就是說,構(gòu)造方法負(fù)責(zé)”生出“一個類對象,并可以在對象出生時進行必要的操作,在這篇文章中會給大家簡單介紹一下析構(gòu)方法,需要的朋友可以參考下
    2023-05-05
  • SpringMVC中的HandlerAdapter解析

    SpringMVC中的HandlerAdapter解析

    這篇文章主要介紹了SpringMVC中的HandlerAdapter解析,HandlerAdapter是一個關(guān)鍵的組件,用于將請求與處理程序方法進行適配和調(diào)度,它充當(dāng)了控制器和處理程序之間的橋梁,負(fù)責(zé)將請求的參數(shù)和處理程序方法進行匹配,并將結(jié)果返回給前端,需要的朋友可以參考下
    2023-10-10
  • Java設(shè)計模式之裝飾模式原理與用法實例詳解

    Java設(shè)計模式之裝飾模式原理與用法實例詳解

    這篇文章主要介紹了Java設(shè)計模式之裝飾模式原理與用法,結(jié)合實例形式詳細(xì)分析了裝飾模式的概念、原理、定義與使用方法,并總結(jié)分析了裝飾模式的優(yōu)缺點,具有一定參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • 基于java實現(xiàn)停車場管理系統(tǒng)

    基于java實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于java實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 關(guān)于@Transactional事務(wù)嵌套使用方式

    關(guān)于@Transactional事務(wù)嵌套使用方式

    Spring框架通過@Transactional注解來管理事務(wù),它可以作用于類和方法上,用于聲明事務(wù)的屬性,如傳播行為、隔離級別、超時時間等,Spring事務(wù)是基于AOP實現(xiàn)的,它在運行時為加了@Transactional注解的方法或類創(chuàng)建代理
    2024-11-11
  • spring?cloud?eureka注冊原理-注冊失敗填坑筆記

    spring?cloud?eureka注冊原理-注冊失敗填坑筆記

    這篇文章主要介紹了spring?cloud?eureka注冊原理-注冊失敗填坑筆記,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 使用jekins自動構(gòu)建部署java maven項目的方法步驟

    使用jekins自動構(gòu)建部署java maven項目的方法步驟

    這篇文章主要介紹了使用jekins自動構(gòu)建部署java maven項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

富源县| 神农架林区| 敖汉旗| 白银市| 吉水县| 寻甸| 阳曲县| 黎川县| 芜湖市| 福建省| 夏邑县| 客服| 伊金霍洛旗| 闸北区| 达孜县| 麻江县| 辽阳市| 临澧县| 财经| 金沙县| 张北县| 平潭县| 双峰县| 瑞丽市| 辽宁省| 嵊州市| 洪泽县| 黎川县| 会昌县| 广河县| 台中县| 赞皇县| 内丘县| 扶风县| 沧州市| 清徐县| 彰化县| 临洮县| 昌宁县| 宜丰县| 辽宁省|