小编Mat*_*ner的帖子

使用 Spring Data Elasticsearch 定义自定义日期格式和转换器

我目前正在从 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)

java elasticsearch spring-data-elasticsearch

2
推荐指数
1
解决办法
2288
查看次数