提问人:mnfsd 提问时间:2/28/2023 最后编辑:Codermnfsd 更新时间:3/13/2023 访问量:144
是否有任何用于解决 java.time.Instant 反序列化错误的注释。我收到此错误,因为我的 dateType 字段为 Instant
Are there any annotations for resolving java.time.Instant deserialization errors. I am getting this error as I have a dateType field as Instant
问:
错误:Java 8 日期/时间类型** ** 默认不支持:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310java.time.Instant
我已经关注了论坛评论并添加了相关的依赖项和映射器,但无法解决问题。
请告诉我是否有任何注释可以解决问题,例如我们对java.time.LocalDate的@JsonDeserialize(using = LocalDateDeserializer.class)
添加了 Jackson 库的依赖项,如本论坛中建议的那样
对于即时字段,我的输入将是这样的:2022-01-21T18:38:55Z
@Bean
ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
答:
0赞
Coder
2/28/2023
#1
在用于创建对象映射器 Bean 的代码中添加此内容
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
更多细节在这篇文章中
0赞
mnfsd
3/3/2023
#2
我通过添加 DefaultInstantSerializer 和 DefaultInstantDeserializer 类并使用各自的 Serializer 和 Deserializer 类进行包装解决了这个问题。下面的代码将帮助您解决此问题,并使用这些默认类注释 java.time.Instant 变量。
1.
public class DefaultInstantSerializer extends InstantSerializer {
public DefaultInstantSerializer() {
super(InstantSerializer.INSTANCE, false, false,
new DateTimeFormatterBuilder().appendInstant(3).toFormatter());
}
}
public class DefaultInstantDeserializer extends InstantDeserializer<Instant> {
public DefaultInstantDeserializer() {
super(Instant.class, DateTimeFormatter.ISO_INSTANT,
Instant::from,
a -> Instant.ofEpochMilli(a.value),
a -> Instant.ofEpochSecond(a.integer, a.fraction),
null,true);
}
}
用法:
public class SomeModel {
// Other fields
JsonDeserialize(using= DefaultInstantDeserializer.class)
JsonSerialize(using = DefaultInstantSerializer.class)
private Instant instant;
}
评论