gpt4 book ai didi

elasticsearch - 如何在 elasticsearch 中存储 Java 8 (JSR-310) 日期

转载 作者:行者123 更新时间:2023-11-29 02:46:53 35 4
gpt4 key购买 nike

我知道 elasticsearch 只能在内部保存 Date 类型。但是我可以让它知道存储/转换 Java 8 ZonedDateTime,因为我在我的实体中使用这种类型吗?

我在类路径上使用 spring-boot:1.3.1 + spring-data-elasticsearch 和 jackson-datatype-jsr310。当我尝试保存 ZonedDateTimeInstant 或其他内容时,似乎没有任何转换适用。

最佳答案

一种方法是像这样创建自定义转换器:

import com.google.gson.*;

import java.lang.reflect.Type;
import java.time.ZonedDateTime;
import static java.time.format.DateTimeFormatter.*;

public class ZonedDateTimeConverter implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
@Override
public ZonedDateTime deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
return ZonedDateTime.parse(jsonElement.getAsString(), ISO_DATE_TIME);
}

@Override
public JsonElement serialize(ZonedDateTime zonedDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
return new JsonPrimitive(zonedDateTime.format(ISO_DATE_TIME));
}
}

然后配置JestClientFactory来使用这个转换器:

    Gson gson = new GsonBuilder()
.registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeConverter()).create();

JestClientFactory factory = new JestClientFactory();

factory.setHttpClientConfig(new HttpClientConfig
.Builder("elastic search URL")
.multiThreaded(true)
.gson(gson)
.build());
client = factory.getObject();

希望对您有所帮助。

关于elasticsearch - 如何在 elasticsearch 中存储 Java 8 (JSR-310) 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674043/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com