暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用jdk1.8新的时间和日期api可能遇到的问题

程序猿wangc 2018-10-25
660

1.在使用jdk1.8新的时间api(jsr310)的时候,我们要考虑各个技术点的兼容性问题,本来不想写这篇文章的,但是感觉现在的博客除了抄袭还是抄袭,没有对某项技术不同版本问题进行一个更新。
2.在使用time api的时候应该考虑两个问题:主流的数据处理层对于time api是否兼容、json工具是否可以正常序列和反序列化time api;因为本人现在使用springboot较多、在解析json的时候用的也是spring内置的jackson所以,我以springboot+jdk1.8time api+jackson为例,分别针对主流的数据处理层技术mybatis和jpa做出兼容性解决方案。
3.springboot主流版本兼容处理:springboot的主流版本是1.15(以1.5.16.RELEASE为例),内置的jackson包含以下组件:

这时候就需要自己首先导入对于time api的支持依赖:
 1<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
2<dependency>
3    <groupId>com.fasterxml.jackson.datatype</groupId>
4    <artifactId>jackson-datatype-jsr310</artifactId>
5    <version>2.8.11</version>
6</dependency>
7<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8 -->
8<dependency>
9    <groupId>com.fasterxml.jackson.datatype</groupId>
10    <artifactId>jackson-datatype-jdk8</artifactId>
11    <version>2.8.11</version>
12</dependency>

如果你的数据处理层是jpa2.1,你可以查看以下jpa2.1的jsr规范,如果你不知道怎么查看可以看我截图的源码部分,翻译下来就是需要一个类型转换器,而这个转换器在jpa2.1提供了,你只需要将其添加到包扫码即可:

1@EntityScan( basePackageClasses = {Application.class ,Jsr310JpaConverters.class})


但是如果你使用的是jpa2.1之前的jsr规范版本需要自行导入
如果你是数据处理层是mybatis3.4.5以上版本时,你不需要做任何的操作,因为3.4.5版本之后MyBatis默认支持JSR-310(日期和时间API),以下是在mybatis官网截图的:


但是如果你使用的是3.4.5以前的版本需要自己导入mybatis对于jdk1.8的typeHandlers的支持:
1<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-typehandlers-jsr310 -->
2<dependency>
3    <groupId>org.mybatis</groupId>
4    <artifactId>mybatis-typehandlers-jsr310</artifactId>
5    <version>1.0.2</version>
6</dependency>

4.springboot2.0版本:以springboot2.0.6.RELEASE版本为例,内置的Jackson包含以下组件:

其中jackson-datatype-jdk8和jackson-datatyep-jsr310就是springboot2.0为了我们方便直接引入了,至于其他组件介绍和上面一样。



文章转载自程序猿wangc,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论