後端統一處理返回前端日期LocalDateTime格式化去T,Long返回前端損失精度問題
一、前言
我們在實際開發中肯定會遇到後端的時間傳到前端是這個樣子的:
2022-08-02T15:43:50
這個時候前後端就開始踢皮球了,!!
後端說:前端來做就可!
前端說:後端來做就可!
作為一名有責任感的後端,這種事情怎麼能讓前端來搞呢!
還有就是Long型別的返回到前端可能會損失精度,這個情況只能後端來做了!
解決方案還是看的開源框架,人家寫的,咱就不造輪子了!直接開車!!
二、錯誤示範
帶著 T
非常不好,產品要求不帶,哈哈,一切按照原型來哦!!
下面的 testNum
的值是Long型別的最大值: 9223372036854775807
,這樣就會損失精度成: 9223372036854776000
三、匯入依賴
<!--json模組--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </dependency>
四、編寫配置類
@Configuration(proxyBeanMethods = false) @ConditionalOnClass(ObjectMapper.class) @AutoConfigureBefore(JacksonAutoConfiguration.class) public class JacksonConfiguration { @Bean @ConditionalOnMissingBean public Jackson2ObjectMapperBuilderCustomizer customizer() { return builder -> { builder.locale(Locale.CHINA); builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault())); // 設定日期格式 builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN); // 解決long型別損失精度 builder.serializerByType(Long.class, ToStringSerializer.instance); // 日期格式自定義類 builder.modules(new PigJavaTimeModule()); }; } }
public class JavaTimeModule extends SimpleModule { public JavaTimeModule() { super(PackageVersion.VERSION); // ======================= 時間序列化規則 =============================== // yyyy-MM-dd HH:mm:ss this.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); // yyyy-MM-dd this.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); // HH:mm:ss this.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN))); // Instant 型別序列化 this.addSerializer(Instant.class, InstantSerializer.INSTANCE); // ======================= 時間反序列化規則 ============================== // yyyy-MM-dd HH:mm:ss this.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); // yyyy-MM-dd this.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); // HH:mm:ss this.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN))); // Instant 反序列化 this.addDeserializer(Instant.class, InstantDeserializer.INSTANT); } }
五、測試成果
我們發現日期的煩人的 T
被去掉了!再也不用踢皮球了哦!!
我們發現後端返回的型別為 Long
時,會自動變為 String
型別,再也不會損失精度了,這個很容易忽視!!
如果覺得有用,一鍵三連起來,小編謝謝大家了!!
有緣人才可以看得到的哦!!!
「其他文章」
- 線性迴歸大結局(嶺(Ridge)、 Lasso迴歸原理、公式推導),你想要的這裡都有
- 【前端必會】webpack loader 到底是什麼
- 中心化決議管理——雲端分析
- HashMap底層原理及jdk1.8原始碼解讀
- 詳解JS中 call 方法的實現
- 列印 Logger 日誌時,需不需要再封裝一下工具類?
- 初識設計模式 - 代理模式
- 密碼學奇妙之旅、01 CFB密文反饋模式、AES標準、Golang程式碼
- [ML從入門到入門] 支援向量機:從SVM的推導過程到SMO的收斂性討論
- 從應用訪問Pod元資料-DownwardApi的應用
- Springboot之 Mybatis 多資料來源實現
- Java 泛型程式設計
- CAS核心思想、底層實現
- 面試突擊86:SpringBoot 事務不回滾?怎麼解決?
- 基於electron vue element構建專案模板之【打包篇】
- MiniWord .NET Word模板引擎,藉由Word模板和資料簡單、快速生成檔案。
- 堆Pwn:House Of Storm利用手法
- 認識執行緒,初始併發
- 1-VSCode搭建GD32開發環境
- Visual Studio 2022 開發 STM32 微控制器 - 環境搭建點亮LED燈