zoukankan      html  css  js  c++  java
  • 如何正确地在Spring Data JPA和Jackson中用上Java 8的时间相关API(即JSR 310也即java.time包下的众神器)

    用过的肯定知道,JSR310的时间API真的是神器,极大的方便了在Java中对时间操作的过程。

    JSR 310规范领导者Stephen Colebourne就是joda-time作者,其主要思想也是借鉴了joda-time,而不是直接把joda-time移植到Java平台中,API是类似的,但做了改进,具体的改进请参考其2009年的一篇文章和InfoQ对他的采访:

    http://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html

    http://www.infoq.com/cn/news/2010/05/jsr-310

    http://blog.joda.org/2010/12/what-about-jsr-310_153.html

    规范下载地址:https://jcp.org/en/jsr/detail?id=310

    东西是挺好,平常时候直接用就行了,毕竟这个也能自由的跟旧的Date等API转换,虽然写起来会略啰嗦,如:

    LocalDateTime nowLocalDateTime = LocalDateTime.now();
    Date nowDate = Date.from(start.atZone(ZoneId.systemDefault()).toInstant());
    

    不过为了更方便的操作时间也能忍了。

    可毕竟是新东西,在之前做项目的时候就遇到了这么两个问题。

    Spring Data JPA结合

    我想在Spring Data JPA(以下简称JPA,但注意JPA其实是一种规范)中的@Entity实体类中将LocalDateTime作为属性的类型来使用,如:

    @Entity
    public class Product {
        ...
        @Column
        private LocalDateTime gmtCreate;
        ...
    }
    

    结果问题来了,当时具体抛什么异常忘记了,大概是什么无法反序列化之类的,总之就是没法用。

    其实很简单,熟悉JPA的应该已经想到了,要用上javax.persistence.AttributeConverter了,网上也有不少自己实现这个转化器的文章,而Spring Data JPA后续也已经有了针对JSR310的实现也即org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters

    而如果你是Spring Boot项目的话,用起来就超级简单了,只需要在启动类上增加一个注解,将Jsr310JpaConverters注册为Bean就可以实现用LocalDateTime作为实体类的属性类型了。注解如下:

    @EntityScan(basePackageClasses = {Jsr310JpaConverters.class})
    

    Jackson结合

    后端的问题解决了,可当前端用到的时候,却又出现了问题,具体抛出什么异常我也给忘了([捂脸]),大概还是不能反序列化之类的吧。

    求助搜索引擎后了解到,原来Jackson默认也是没有兼容JSR310的时间API的,所以这时候需要引入对应的Jackson的相关模组(那个关键类就叫com.fasterxml.jackson.datatype.jsr310.JavaTimeModule),如果是使用Gradle的话也就是引入如下依赖:

    compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
    

    OK,完美搞定~

  • 相关阅读:
    vue父子组件通信
    canvas(一)
    js中的this
    git中遇到的问题
    javaScript中各种数据结构的遍历
    git合并多个提交
    vue学习笔记(三)——vuex—store配置
    vue学习笔记(二)——路由配置
    0欧电阻的作用
    STM32L系列单片机内部EEPROM的读写
  • 原文地址:https://www.cnblogs.com/mightyvincent/p/8541517.html
Copyright © 2011-2022 走看看