zoukankan      html  css  js  c++  java
  • 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之后,就不会出现该现象.

  • 相关阅读:
    65 组件 静态文件相关 视图
    作者和书籍的增删改查 多对多
    64 装饰器函数: 母版 csrf防御机制 cookie
    61 书籍和出版社 的增删改查 几秒后跳转一个页面
    60 Django项目 单表(出版社)的增删改查 __str__方法及格式化输出 的两个方法
    模块 itertools
    59 Django基础三件套 , 模板{{}}语言 , 程序连mysql Django项目app Django中ORM的使用
    nginx 并发数
    设置tomcat最大内存
    goaccess安装
  • 原文地址:https://www.cnblogs.com/zjm-1/p/9587872.html
Copyright © 2011-2022 走看看