Ошибка преобразования даты ElasticSearch в Java LocalDateTime - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть микро-сервис, который читает данные из индекса ElasticSearch и обрабатывает их.Этот индекс имеет поле даты, и я не могу загрузить данные поля даты в объект документа.Вот снимок того, чего я пытаюсь достичь.

Индекс

"date_created": {
  "type": "date"
}

Он хранит дату как

"date_created": "2015-07-02T14:56:51.000Z"

Мой класс сущности

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "account", type = "doc")
public class Account implements Serializable {

...

    @JsonProperty("date_created")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime dateCreated;

...

}

Ошибка при получении записей из репозитория ElasticSearch во время выполнения, как показано ниже

nested exception is org.springframework.data.elasticsearch.ElasticsearchException: failed to map source ...
java.time.format.DateTimeParseException: Text '2002-08-05T04:00:00.000Z' could not be parsed, unparsed text found at index 23

Есть ли способ обойти эту проблему?Я буду пытаться изменить определение индекса и JsonFormat, как показано ниже, но я не уверен, будет ли это работать.Я прошу заранее, потому что мне потребуется время, чтобы реализовать изменения в индексе.

Изменение индекса Я попробую позже.

"date_created": {
  "type": "date",
  "format": "yyyy-MM-dd'T'HH:mm:ss.SSS"
}

Изменение JsonFormat

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")

Ваша помощь очень ценится.

1 Ответ

0 голосов
/ 22 февраля 2019

Я воссоздал индекс, как упомянуто выше.Однако после создания индекса logstash не смог перекачать данные в индекс.Исправление данных в instream могло быть дорогостоящим.Следовательно я восстановил к исходному индексу назад.

Что действительно решило мои проблемы?Я сделал небольшое изменение в паттерне @JsonFormat, и он добился цели.

До

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")

После

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

Итак, в основном «Z» ввозвращаемая дата была символом, а не форматером даты.С одинарными кавычками я сказал форматеру трактовать его как символ, а НЕ как строку формата.

Надеюсь, это разрешит путаницу для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...