问题标签 [jsr310]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1486 浏览

spring-boot - 在 Spring Boot 中使用 Java 8 日期/时间 API

我正在一个全新的 Spring Boot (1.5) 应用程序上使用 Java 8 Date/Time API (JSR-310)。在第一次公开发布之前,我们可以随时了解每个依赖项,这就是为什么我想澄清 JSR-310 在完整 Spring Boot 堆栈上的处理状态。

Boot Starter Web - Jackson 序列化

只需添加jackson-datatype-jsr310依赖项。

但这真的有必要吗?如果是这样,为什么它不包含在标准捆绑包中?

引导启动数据 - 休眠持久性

这就是棘手的地方。我对此有点挣扎,可能是因为我使用的是 PostgreSQL。似乎 Java 8 兼容性已被 JDBC 用于 4.2 版,这意味着:

  • 使用 JDBC 4.2 驱动程序(对于 PostgreSQL,当前是 9.4.1212)
  • 覆盖 Hibernate 版本 >= 5.2.6,这带来了对 JDBC 4.2 的支持

相关:PSQLException - spring boot 1.4.1 - spring data jpa - offsetdatetime/localdatetime 标识为 Bytestream

一切都按预期工作,但就当前(Spring Boot 1.5.2)开发状态而言,我做得还好吗,有什么首选的方法吗?

提前致谢

0 投票
1 回答
869 浏览

java - 这是 jackson-datatype-jsr310 反序列化器中的错误吗?

我知道在成千上万的开发人员每天使用的库中发现错误是冒昧的。所以我认为我的标题问题的答案是“不!!!”,但是......

我有一个对象,其中包含从前端 (JS) 收到的日期,并将其存储到 MongoDB 数据库中。我使用 Spring 来获取这个对象(使用 REST 控制器),并使用 Spring 来执行持久性(使用 MongoDBRepository)。我的计算机配置了 CEST 时钟,因此 GMT+2 (UTC +0200)。

我的 POJO 中的日期存储在 LocalDateTime 中。

这是我的对象:

以下单元测试显示 Spring(使用 jackson-jsr310)用 UTC 日期时间填充我的 LocalDateTime。

我们可以在杰克逊源代码LocalDateTimeDeserializer.java的第 74 行看到:

但是当我保存在我的数据库中时,spring 使用 spring-data-commons 将我的 LocalDateTime 转换为 Date ,然后再将日期存储在数据库中。我们可以在spring-data-commons/../Jsr310Converters.java中阅读:

因此,spring-data JSR310 转换器将 localdatetime 解释为默认系统区域中的瞬间。

问题是当我的前端发送“2017-04-03T20:00:00Z”时,REST 控制器将其存储在 LocalDateTime 中,时间如下:20:00:00。而当 mongo-data 转换器将其转换为日期时,得到的时间是 20:00:00+0200(因为我的电脑在 CEST 时区)。

我的结论是我不应该将我的日期存储在 LocalDateTime 中,而应该存储在 Date (java.util) 或 Instant 中。

但是,其中一个转换器是否存在错误?

0 投票
0 回答
30 浏览

java - 是否有用于解析 jsr310 LocalDateTime 的 restlet.ext.jackson 版本?

想知道是否有办法让 restlet jackson 扩展来解析 jsr310 LocalDateTime?目前它(版本 2.3.9 的RESTlet)抛出这个异常:

这个问题与杰克逊无关——它确实消化了 jsr310 数据类型(jackson-modules-java8)——问题是关于基于杰克逊的 restlet 扩展。

我可以看到我的服务器(restlet 2.3.9)将其作为 JSON 发送:

但是相同的restlet 2.3.9构建的客户端无法解析这个......

谢谢!

0 投票
2 回答
11889 浏览

java - How to abstract away java.time.Clock for testing purposes in Spring

I have a question with regards to the question Time dependent unit tests

Let's say I build Spring application which contains service interface and its implementation

If I want to change clock in test, I would have to "pollute" production code and interface with e.g. setClock method as follows:

In test, I can invoke, e.g.:

How can I abstract away such cross-cutting concern in Spring?

I want to stick with java.time.Clock (I don't want to use Joda)

0 投票
2 回答
5325 浏览

java - 如何将包含 LocalDate 字段的 json 转换为可反序列化的格式?

我有一个存储在字符串中的对象。对象的字段之一是 LocalDate。

我应该如何将此 json 转换为可用于反序列化的格式?

以下代码

导致此异常:

这是我用作 MyCustomObject<LocalDate> 的 MyCustomObject 类

0 投票
1 回答
3246 浏览

java - JPA-QL 查询查找具有 LocalDate startDate 和 LocalDate endDate 之间的 LocalDateTime 时间戳的所有实体

我有一个 JPA 实体 TimeSlot,其LocalDateTime字段名为startDateTime

我在 WildFly 10.1 上使用休眠。如何使用startDateTimebetweenstartDate和查询所有实体endDate

此查询失败,因为时间戳不是日期:

0 投票
3 回答
1835 浏览

java-8 - 如何使方法通用以与 LocalDate 和 LocalDateTime 一起使用?

我有一个Java方法如下:

我也想为同样的逻辑LocalDateTimeLocalDateTime如果我重载该方法,它将是完全相同的代码。

如何使该方法具有泛型以使用泛型LocalDateLocalDateTime任何其他机制?

如何根据我拥有的类型制作context.getXXXDate()... toLocalDate()toLocalDateTime()通用代码?

0 投票
0 回答
149 浏览

java - Jackson ZonedDateTime 序列化一次 Z 一次 +02:00

您好,我正在使用带有 jackson-datatype-jsr310 扩展名的 jackson 2.8.8。我注意到一次日期时间被序列化为:

但另一次进入:

第一个选项大部分时间都会显示,但为什么有时杰克逊会生成第二个选项?我的配置:

0 投票
4 回答
3165 浏览

java - 当 Java DateTime 中的 Duration.between() 返回负值时

我正在为 Java OCP 测试做准备,在模拟测试中有一个关于 Java DateTime 的问题,如下所示:

鉴于纽约比洛杉矶早 3 小时,以下代码将打印什么?

正确答案是 PT3H,但我有点困惑,这本书是否给出了错误答案?

假设 NY 比 LA 早 3 小时,这是否意味着,例如,NY 是 5:00,然后 LA 是 2:00。所以 Duration.between(5,2) 应该是 PT-3H,因为根据 Javadoc: The result of this method can be a negative period if the end is before the start. To guarantee to obtain a positive duration call abs() on the result.,在这种情况下,“2”“5”之前 ,所以结果应该是 PT-3H,而不是 PT3H。

你怎么看,哪一个是正确的?

0 投票
1 回答
785 浏览

spring-boot - 如何在 Spring Integration 中为 JsonObjectMapper 设置日期格式

我正在将我的 Java 对象转换为Map使用 Spring IntegrationObjectToMapTransformertransformPayload().

一切正常,除了Instant我的对象中的字段被分解为epochSecondand nano,这反过来又在数据存储(MongoDB)中持久化时引发异常。

JsonObjectMapper这是用于将其转换Object为的 Spring Integration Mapprivate final JsonObjectMapper<?, ?> jsonObjectMapper = JsonObjectMapperProvider.newInstance();

我的问题是如何为上述映射器配置日期格式。就像Jackson's一样ObjectMapper::configure(),我们这里有没有类似的选择?我在源代码和互联网上都找不到任何东西!

我也尝试spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS在我的 中启用/禁用application.properties,但不高兴!

我有jackson-datatype-jsr310依赖pom.xml

如何获得Instant正确的格式?