我目前正在从 Spring Data Elasticsearch 3.2.x 迁移到 4.0.0。
我正在删除JacksonEntityMapper定义了自定义的ZonedDateTimeDeserializer,以使用ElasticsearchEntityMapper
我有一个 ZonedDateTime 字段定义如下:
@Field(type = Date, format = DateFormat.date_time)
private final ZonedDateTime loggedIn;
Run Code Online (Sandbox Code Playgroud)
但是,this的反序列化丢失了zone信息,从而导致存储前后字段的比较失败:
前
loggedIn=2020-06-01T09:50:27.389589+01:00[Europe/London]
Run Code Online (Sandbox Code Playgroud)
后
loggedIn=2020-06-01T09:50:27.389+01:00
Run Code Online (Sandbox Code Playgroud)
我希望区域信息会丢失,因为只存储了时区偏移量。使用 Jackson,ZonedDateTimeDeserializer我能够在 ZonedDateTime 构建期间应用 Zone。
理想情况下,我想定义一个自定义日期格式和转换器类来处理我的场景。
我尝试了以下字段配置:
@Field(type = Date, format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ")
private final ZonedDateTime loggedIn;
Run Code Online (Sandbox Code Playgroud)
使用读/写转换器
@WritingConverter
public class ZonedDateTimeToStringConverter implements Converter<ZonedDateTime, String> {
@Override
public String convert(ZonedDateTime source) {
return source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
}
@ReadingConverter
public class StringToZonedDateTimeConverter implements Converter<String, ZonedDateTime> { …Run Code Online (Sandbox Code Playgroud)