带有 LocalDateTime 的 Spring Boot 项目

Posted

技术标签:

【中文标题】带有 LocalDateTime 的 Spring Boot 项目【英文标题】:Spring boot project with LocalDateTime 【发布时间】:2018-03-21 07:25:48 【问题描述】:

你可以在 Spring Boot 项目中使用 LocalDateTime 吗?如果可以,如何使用?

我尝试关注此post 并添加了依赖关系和 application.properties 中所需的行,但我仍然得到:

java.io.StreamCorruptedException: invalid stream header: 32303137

在持久化数据或尝试查看具有使用 Java.Util.Date 创建的日期的现有数据时。

【问题讨论】:

您可以将java.time 类型与支持这些类型的任何 JPA 提供程序一起使用,并且由于这些类型在 JPA 2.2 中是标准的,因此任何兼容的 JPA 2.2 提供程序 Spring-boot 是一个自以为是的框架。如果您知道如何让 Springboot 进入 JPA2.2,请告诉我。 尝试从您的实体字段中删除 @Temporal(TemporalType.TIMESTAMP)。 【参考方案1】:

好的,所以我开始了。它需要多次更改才能使 Hibernate、Springboot 和 Thymeleaf 都与 Java 8 - LocalDateTime 一起工作。

休眠

添加依赖:

compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.4.0")
compile group: 'org.hibernate', name: 'hibernate-java8'

将以下内容添加到 application.properties:

spring.jackson.serialization.write_dates_as_timestamps=false

我的实体上的注释如下所示:

@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
private LocalDateTime somedate;

虽然这似乎不是严格需要的。

百里香

添加依赖:

compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time', version: '3.0.0.RELEASE'

确保它与您的 Thymeleaf 版本匹配。

在项目中的任何 html 中,您的日期字段现在应该使用 #temporals 而不是 #dates。即:

<td th:text="$#temporals.format(object.somedate, 'yyyy-MM-dd HH:mm')">12/12/2018</td>

春季启动

在我的 Application.java 类中我添加了:

@Bean
public Java8TimeDialect java8TimeDialect() 
    return new Java8TimeDialect();

以下资源非常宝贵:

http://blog.codeleak.pl/2015/11/how-to-java-8-date-time-with-thymeleaf.html#comment-form (Thymeleaf/Springboot)

https://www.thoughts-on-java.org/hibernate-5-date-and-time/(休眠)

【讨论】:

对于没有时间的仅日期值,请使用 LocalDate 而不是 LocalDateTime 虽然我不知道你更广泛的意图,但让我提醒你不要使用 LocalDateTime 作为日期时间值。该类故意缺少任何时区或与 UTC 偏移的概念。所以那个类代表时间线上的一个时刻,只是一个潜在时刻的范围。如果您要表示时间轴上的特定时刻,请使用其他 java.time 类:InstantOffsetDateTimeZonedDateTime 您的答案提到了休眠,但在其下列出了杰克逊依赖项。也许您在答案中遗漏了与休眠相关的内容?

以上是关于带有 LocalDateTime 的 Spring Boot 项目的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 1.4:LocalDateTime 映射到 varbinary 而不是时间戳类型

在 Spring Boot 和 ElasticSearch 中使用 Instant、LocalDateTime 和 ZonedDateTime

spring-rest接口LocalDateTime转时间戳

spring-rest接口LocalDateTime转时间戳

spring-rest接口LocalDateTime转时间戳

Spring boot + Jackson + LocalDateTime:日期解析不正确