Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有办法将所有日期序列化和反序列化为UTC毫秒?_Java_Spring Boot_Javers - Fatal编程技术网

Java 是否有办法将所有日期序列化和反序列化为UTC毫秒?

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

我试图在我们的应用程序中标准化日期,以便在请求和响应中发送UTC毫秒

应用程序正在对REST后端使用Spring引导。我为
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中发布