Java 是否有办法将所有日期序列化和反序列化为UTC毫秒?
我试图在我们的应用程序中标准化日期,以便在请求和响应中发送UTC毫秒 应用程序正在对REST后端使用Spring引导。我为Java 是否有办法将所有日期序列化和反序列化为UTC毫秒?,java,spring-boot,javers,Java,Spring Boot,Javers,我试图在我们的应用程序中标准化日期,以便在请求和响应中发送UTC毫秒 应用程序正在对REST后端使用Spring引导。我为java.util.Date、java.time.LocalDateTime和java.time.Instant添加了BasicStringTypeAdapters,如下所示,但没有应用任何适配器 如果我为java.lang.String添加了一个虚拟的,它就可以工作了,所以我知道这些都是在适当的位置注册的 但是,我相信代码正在无条件地覆盖这些适配器。特别是registerJ
java.util.Date
、java.time.LocalDateTime
和java.time.Instant
添加了BasicStringTypeAdapters
,如下所示,但没有应用任何适配器
如果我为java.lang.String
添加了一个虚拟的,它就可以工作了,所以我知道这些都是在适当的位置注册的
但是,我相信代码正在无条件地覆盖这些适配器。特别是registerJsonTypeAdapters(Java8TypeAdapters.adapters())
覆盖java.time.LocalDateTime
和java.time.Instant
和(我相信)gsonBuilder.serializeNulls().setDateFormat(ISO_DATE_time_格式)代码>覆盖java.util.Date
如果我不正确,有人能告诉我如何将所有日期序列化为UTC毫秒吗
如果我是对的,我还能得到一些关于如何进行的建议吗
返回TransactionalJaversBuilder
贾维斯先生()
.与TXManager(transactionManager)合作
.withObjectAccessHook(新的HibernateUnproxy ObjectAccessHook())
.registerJaversRepository(sqlRepository)
.registerValueTypeAdapter(
新的BasicStringTypeAdapter(){
@凌驾
公共类getValueType(){
返回日期.class;
}
@凌驾
公共字符串序列化(日期值){
返回字符串.valueOf(value.getTime());
}
@凌驾
公共日期反序列化(字符串输入){
返回新日期(Long.valueOf(in));
}
}
)
.registerValueTypeAdapter(
新的BasicStringTypeAdapter(){
@凌驾
公共类getValueType(){
返回LocalDateTime.class;
}
@凌驾
公共字符串序列化(LocalDateTime值){
返回字符串.valueOf(value.toInstant(ZoneOffset.UTC).toEpochMilli());
}
@凌驾
公共LocalDateTime反序列化(字符串输入){
返回Instant.ofEpochMilli(Long.valueOf(in)).atZone(ZoneOffset.UTC).toLocalDateTime();
}
}
)
.registerValueTypeAdapter(
新的BasicStringTypeAdapter(){
@凌驾
公共类getValueType(){
返回Instant.class;
}
@凌驾
公共字符串序列化(即时值){
返回字符串.valueOf(value.toEpochMilli());
}
@凌驾
公共即时反序列化(字符串输入){
返回瞬间of(长值of(in));
}
}
)
.build();
您能设置一些断点或日志语句以确保它到达您的代码吗?我有。它为上述所有内容调用getValueType
,如果我注册了一个不同类型的适配器(即String
),它将完全按照预期工作。代码正在被调用,我只是相信注册正在被覆盖。Hi@SeaMauFive,你能为这个问题编写一个失败的测试用例并把它推到这里吗?@BartekWalacik PR这里。如果我遗漏了什么,请告诉我。谢谢你的及时回复!为了记录在案,@SeaMauFive为这个问题提供了一个修复程序,它在Javers 5.8.10中发布