LocalDatetime 與 mybatis、json的坑


總所周知,localdatetime是jdk8 推出的關於日期計算非常方便地一個類,一旦開始用上就欲罷不能。但是在使用的時候,坑還是蠻多的。

一、mybatis與LocalDatetime

如果直接將實體里面所有的Date類型換成LocalDatetime之后,運行程序是會報異常的。此時,可以加入以下依賴:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis-typehandlers-jsr310</artifactId>
  4. <version>1.0.2</version>
  5. </dependency>

在mybatis3,.4以上,加入該依賴即可生效。mapper等跟之前一樣無需修改。

二、LocalDatetime與json

此處localdatetime轉json用的是jackson,其他轉json的工具未測

待轉類:

  1. public class MyTest {
  2.  
  3. private LocalDateTime now;
  4.  
  5. public LocalDateTime getNow() {
  6. return now;
  7. }
  8.  
  9. public void setNow(LocalDateTime now) {
  10. this.now = now;
  11. }
  12. }


將該類實例直接轉成json之后輸出

 

  1. {
  2. "now" : {
  3. "dayOfMonth" : 29,
  4. "dayOfWeek" : "FRIDAY",
  5. "dayOfYear" : 363,
  6. "hour" : 23,
  7. "minute" : 45,
  8. "month" : "DECEMBER",
  9. "monthValue" : 12,
  10. "nano" : 128000000,
  11. "second" : 10,
  12. "year" : 2017,
  13. "chronology" : {
  14. "id" : "ISO",
  15. "calendarType" : "iso8601"
  16. }
  17. }
  18. }


這樣一個時間顯得有點瑣碎。我們一般跟前端交互的時候,用的都是形如 yyyyMMdd HH:mm:ss 這樣的格式。所以此時就需要轉下格式

  1. {
  2. "now" : "2017-12-29 23:50:32"
  3. }

這是時候,就需要使用到注解

作為接受參數時,使用

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

作為格式化輸出時,需要使用

@JsonSerialize(using = LocalDateTimeSerializer.class)

三 奇怪的時間

有時候,使用json序列化之后的時間,會發現比傳參的時間差距有幾個小時.一開始感覺很奇怪,后來發現json序列化的時候指定時區為GMT+8之后,就不會出現該現象.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM