久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

徹底解決Springmvc中時間的轉換和序列化等問題-創新互聯

痛點
在使用Spring mvc 進行開發時我們經常遇到前端傳來的某種格式的時間字符串無法用java8的新特性java.time包下的具體類型參數來直接接收。 我們使用含有java.time封裝類型的參數接收也會報反序列化問題,在返回前端帶時間類型的同樣會出現一些格式化的問題。今天我們來徹底解決他們。

為息烽等地區用戶提供了全套網頁設計制作服務,及息烽網站建設行業解決方案。主營業務為網站制作、成都網站設計、息烽網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

建議
其實最科學的建議統一使用時間戳來代表時間。這個是最完美的,避免了前端瀏覽器的兼容性問題,同時也避免了其它一些中間件的序列化/反序列化問題。但是用時間表達可能更清晰語義化。兩種方式各有千秋,如果我們堅持使用java8的時間類庫也不是沒有辦法。下面我們會以java.time.LocalDateTime為例逐一解決這些問題。

局部注解方式
網上有很多文章說該注解是前端指向后端的,也就是前端向后端傳遞時間參數格式化使用的,這沒有錯!但是有一個小問題,該方式只能適用于不涉及反序列化的情況下。也就是以下場景才適用:

@GetMapping("/local")
    public Map<String, String> data(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime) {
        Map<String, String> map = new HashMap<>(1);
        map.put("data", localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        return map;
    }

如果你在下面這個場景使用就不行了:

@Data
public class UserInfo {

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthday;
    private String name;
    private Integer age;
}

   @PostMapping("/user")
    public Object postData(@RequestBody UserInfo userInfo) {
        System.out.println("userInfo = " + userInfo);
        return userInfo;
    }

原因是Post請求參數在body中,需要反序列化成對象。默認是jackson類庫來進行反序列化,并不觸發@DateTimeFormat注解機制。這時我們就需要使用jackson的格式化注解@JsonFormat。我們將實體類UserInfo改造成下面的就可以了:

@Data
public class UserInfo {
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime birthday;
    private String name;
    private Integer age;
}

以上兩個注解可以并存,但是一定要清楚各自的使用場景。這里還有一個小細節:格式一定要對應好時間類型。比如yyyy-MM-dd 對應java.time.LocalDate 。想再個性化一些@JsonFormat 可以被@JsonDeserialize和@JsonSerialize 代替。但是它們的using參數需要你自己實現為你對應的時間類型類型。如果@JsonFormat、@JsonDeserialize和@JsonSerialize同時存在@JsonFormat的優先級要更高。

局部處理的好處
局部處理的好處在于八個字:百花齊放,百家爭鳴 。可以保持多樣性、個性化 。但是局部帶來了一個新的問題 :沒有共同的標準 、不兼容。進而不方便維護。所以有時候基于業務需要我們全局化可以統一管理。下面我們將講解如何進行全局化配置。

全局化化時間格式配置
全局化其實也是基于 @DateTimeFormat 和@JsonFormat 兩種場景來進行配置。對于@DateTimeFormat的場景我們通過實現Spring提供的接口:

DateTimeFormatter :
     // 時間格式化
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.CHINA);

類型轉換接口:

org.springframework.core.convert.converter.Converter&lt;S,T&gt;
實現:

@Bean
    public Converter<String, LocalDateTime> localDateConverter() {
        return new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String source) {
                return LocalDateTime.parse(source, FORMATTER);
            }
        };
    }

或者格式化接口:

org.springframework.format.Formatter&lt;T&gt;
實現 :

@Bean
    public Formatter<LocalDateTime> localDateFormatter() {
        return new Formatter<LocalDateTime>() {
            @Override
            public LocalDateTime parse(String text, Locale locale) throws ParseException {
                return LocalDateTime.parse(text, FORMATTER);
            }

            @Override
            public String print(LocalDateTime object, Locale locale) {
                return object.format(FORMATTER);
            }
        };
    }

以上兩個接口的實現都要注冊為Spring Bean,配置的時候二者選其一即可,其中S即Source也就是來源,其實就是前端的時間字符串。T即Target也就是目標,代表你需要轉化或者格式化的時間java類型。那么對于時間序列化和反序列化我們進行如下配置就行了(基于默認jackson,以LocalDateTime 為例):

@Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

        return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder
                 // 反序列化
                .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(FORMATTER))
                 // 序列化
                .serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(FORMATTER));
    }

同樣該jsonMapper自定義構建器要注冊成Spring Bean才行。

全局配置要點

全局配置的一些優缺點上面已經闡述了,這里我還是要啰嗦一下要點避免你踩坑。全局配置跟局部配置一樣。同樣要約定pattern。這就要求我們全局保持一致。我們可以實現多個以上的全局配置來對其他諸如LocalDate、OffsetDateTime 的適配。同時如果我們接入了其它一些需要用到序列化/反序列化的中間件,比如redis、rabbitmq,我們也要注意進行適配。

總結

通過以上對時間格式的局部和全局處理方式的介紹,相信困擾你的Spring mvc 時間問題不會再存在了。如果感覺寫對可以請轉發告訴其他同學,點個贊,關注一下

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。

文章題目:徹底解決Springmvc中時間的轉換和序列化等問題-創新互聯
標題來源:http://www.js-pz168.com/article8/coihop.html

成都網站建設公司_創新互聯,為您提供ChatGPT網站營銷網站導航靜態網站App設計云服務器

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
日韩午夜在线观看| 亚洲日本欧美天堂| 一区二区三区四区亚洲| 免费成人在线观看| 成人动漫视频在线| 欧美日韩一区在线播放| 欧美日韩一级视频| 国产精品色哟哟网站| 爽爽淫人综合网网站| 高清视频一区二区| 日本一区二区三区四区在线观看| 欧美日本免费一区二区三区| 国产精品久久久久精k8| 麻豆一区二区三区| 国产高清自拍99| 欧洲国内综合视频| 中文字幕高清一区| 麻豆久久久久久| 黑人中文字幕一区二区三区| 欧美性猛交xxxx黑人交| 国产精品免费免费| 国产资源精品在线观看| 精品在线不卡| 制服丝袜一区二区三区| 亚洲乱码中文字幕| 粉嫩在线一区二区三区视频| 日本精品一区| 精品日韩在线观看| 日韩国产在线观看一区| av观看久久| 欧美日韩美少妇| 亚洲日本免费电影| 成人18精品视频| 伊人久久av导航| 国产精品久久久久久久第一福利| 精品一区二区精品| 欧美一区二区三区四区在线观看地址 | 免费影院在线观看一区| 欧美一区二区日韩| 亚洲一区二区欧美日韩| 91丨九色丨黑人外教| 欧美影院午夜播放| 亚洲美女视频在线观看| 成人av电影在线观看| 91久久奴性调教| 综合激情成人伊人| 不卡一区二区三区四区| 91福利视频久久久久| 最新国产の精品合集bt伙计| 成人激情动漫在线观看| 91福利资源站| 亚洲乱码国产乱码精品精的特点| 成人app在线| 欧美日韩免费一区二区三区| 亚洲午夜精品在线| 国产精品二区三区| 日韩美一区二区三区| 青青草原综合久久大伊人精品| 久久久久久99| 国产亚洲va综合人人澡精品 | 在线精品视频小说1| 亚洲激情图片qvod| www日韩av| 精品少妇一区二区三区免费观看| 久久精品国产秦先生| 先锋影音网一区| 亚洲欧洲av色图| 91老师国产黑色丝袜在线| 69久久夜色精品国产69蝌蚪网| 丝袜美腿亚洲综合| 日本黑人久久| 一色屋精品亚洲香蕉网站| 91在线视频观看| 91精品国产入口| 久久福利视频一区二区| 亚洲一区美女| 亚洲综合另类小说| 久久精品欧美| 国产精品久久网站| 91色乱码一区二区三区| 欧美大片一区二区| 久久国内精品自在自线400部| 亚洲精品中文综合第一页| 亚洲美女免费在线| 激情视频一区二区| 国产精品午夜在线观看| 91亚洲大成网污www| 精品久久久久香蕉网| 国产成人午夜精品5599| 欧美群妇大交群中文字幕| 免费一级欧美片在线观看| 在线观看日本一区| 五月婷婷久久丁香| 亚洲精品欧美精品| 亚洲成人在线观看视频| 日韩国产高清一区| 亚洲综合视频网| 日本高清视频一区二区三区| 亚洲精品欧美在线| 日本成人黄色| 亚洲一区二区四区蜜桃| 任我爽在线视频精品一| 亚洲综合在线观看视频| 日产中文字幕在线精品一区| 一区二区三区在线视频免费 | 在线看日本不卡| 美国毛片一区二区三区| 欧美午夜在线一二页| 久久av老司机精品网站导航| 欧美视频在线观看一区| 精品亚洲成a人在线观看| 欧美日韩一区成人| 国产精品自拍在线| 欧美一级国产精品| 成人免费毛片片v| 精品国产1区二区| 91成人免费在线观看| 欧美经典三级视频一区二区三区| 国产v亚洲v天堂无码| 国产精品传媒视频| 欧美精品中文字幕一区二区| 亚洲午夜av在线| 在线不卡日本| 久久se这里有精品| 91精品国产91热久久久做人人| 国产+成+人+亚洲欧洲自线| 精品成人一区二区| 国产高清一区视频| 一区二区三区影院| 中文字幕中文字幕在线中一区高清 | 久久91精品久久久久久秒播| 欧美精品xxxxbbbb| 波多野结衣欧美| 日本一区二区动态图| 久久涩涩网站| 午夜视频一区二区三区| 欧美主播一区二区三区| 国产精品一二三四区| 久久夜色精品一区| 精品国产一区二区三区麻豆免费观看完整版| 国产精品水嫩水嫩| 午夜欧美性电影| 极品销魂美女一区二区三区| 欧美大片日本大片免费观看| 成人在线观看av| 亚洲一区欧美一区| 欧美日韩小视频| 成人av资源在线| 国产精品福利一区二区三区| 丝袜美腿玉足3d专区一区| 久久99精品国产.久久久久久| 日韩免费性生活视频播放| 国产精品一区二区a| 亚洲一二三四区不卡| 欧美日韩精品一区视频| 91丨porny丨最新| 一区二区三区四区不卡视频| 在线观看免费亚洲| av不卡在线播放| 一区二区成人在线观看| 欧美三级电影在线观看| 91麻豆精品在线观看| 亚洲自拍偷拍综合| 欧美精品一级二级三级| 成人18视频| 天天影视涩香欲综合网| 日韩精品一区二区三区在线观看| 国产一区二区三区四区五区加勒比 | 国产一区二区不卡视频在线观看| 午夜成人免费电影| 日韩午夜激情av| 久久国产日韩欧美| 九九久久精品视频| 日本一二三不卡| 色一情一伦一子一伦一区| 成人av网站免费| 亚洲制服丝袜av| 欧美一区二区啪啪| 精品在线视频一区二区| 九色综合狠狠综合久久| 国产欧美精品一区二区三区四区 | 97碰碰视频| 日产精品久久久久久久性色 | 国产成a人无v码亚洲福利| 亚洲欧洲成人自拍| 欧美日韩视频第一区| 国产精品一区在线观看| 久久精品国产一区二区三| 国产精品无码永久免费888| 色妞www精品视频| 成人羞羞视频免费| 狂野欧美性猛交blacked| 欧美激情一区二区三区全黄| 在线精品视频一区二区三四| 国产精品露出视频| 韩国女主播一区二区三区| 中文字幕永久在线不卡| 91精品婷婷国产综合久久| 欧美另类视频在线| 成人app网站|