2016-01-08 16 views
6

elasticsearchは内部でDateタイプしか保存できません。しかし、私はそれを私のエンティティでこのタイプを使用するので、Java 8のストア/変換に気づかせることができますZonedDateTimeelasticsearchにJava 8(JSR-310)の日付を保存する方法

クラスパス上でspring-boot:1.3.1 + spring-data-elasticsearchとjackson-datatype-jsr310を使用しています。 ZonedDateTimeInstantなどを保存しようとすると、コンバージョンが適用されないようです。

答えて

0

これを行う1つの方法は、このようなカスタムコンバータを作成することです:

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(); 

はそれが助けいただければ幸いです。

+0

私の悪い、申し訳ありません。 ISO_DATE_FORMATにゾーン情報がないと思った。間違ったコメントを削除します。 – mindas

関連する問題