问题标签 [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.
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)开发状态而言,我做得还好吗,有什么首选的方法吗?
提前致谢
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 中。
但是,其中一个转换器是否存在错误?
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构建的客户端无法解析这个......
谢谢!
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)
java - 如何将包含 LocalDate 字段的 json 转换为可反序列化的格式?
我有一个存储在字符串中的对象。对象的字段之一是 LocalDate。
我应该如何将此 json 转换为可用于反序列化的格式?
以下代码
导致此异常:
这是我用作 MyCustomObject<LocalDate> 的 MyCustomObject 类
java - JPA-QL 查询查找具有 LocalDate startDate 和 LocalDate endDate 之间的 LocalDateTime 时间戳的所有实体
我有一个 JPA 实体 TimeSlot,其LocalDateTime
字段名为startDateTime
:
我在 WildFly 10.1 上使用休眠。如何使用startDateTime
betweenstartDate
和查询所有实体endDate
?
此查询失败,因为时间戳不是日期:
java-8 - 如何使方法通用以与 LocalDate 和 LocalDateTime 一起使用?
我有一个Java方法如下:
我也想为同样的逻辑LocalDateTime
。LocalDateTime
如果我重载该方法,它将是完全相同的代码。
如何使该方法具有泛型以使用泛型LocalDate
或LocalDateTime
任何其他机制?
如何根据我拥有的类型制作context.getXXXDate()... toLocalDate()
或toLocalDateTime()
通用代码?
java - Jackson ZonedDateTime 序列化一次 Z 一次 +02:00
您好,我正在使用带有 jackson-datatype-jsr310 扩展名的 jackson 2.8.8。我注意到一次日期时间被序列化为:
但另一次进入:
第一个选项大部分时间都会显示,但为什么有时杰克逊会生成第二个选项?我的配置:
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。
你怎么看,哪一个是正确的?
spring-boot - 如何在 Spring Integration 中为 JsonObjectMapper 设置日期格式
我正在将我的 Java 对象转换为Map
使用 Spring IntegrationObjectToMapTransformer
的transformPayload()
.
一切正常,除了Instant
我的对象中的字段被分解为epochSecond
and nano
,这反过来又在数据存储(MongoDB)中持久化时引发异常。
JsonObjectMapper
这是用于将其转换Object
为的 Spring Integration Map
:
private final JsonObjectMapper<?, ?> jsonObjectMapper = JsonObjectMapperProvider.newInstance();
我的问题是如何为上述映射器配置日期格式。就像Jackson
's一样ObjectMapper::configure()
,我们这里有没有类似的选择?我在源代码和互联网上都找不到任何东西!
我也尝试spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS
在我的 中启用/禁用application.properties
,但不高兴!
我有jackson-datatype-jsr310
依赖pom.xml
如何获得Instant
正确的格式?