Исключение преобразования при чтении данных двоичного поля в поле byte [] в ES 7.5.x - PullRequest
2 голосов
/ 13 февраля 2020

Мой класс сущностей определен следующим образом:

@Document(indexName = "payload-pojo")
public class PayloadPojo {
    @Id
    private String id;

    @Field(index = false,type = FieldType.Binary)
    byte[] payload;

}

, а Репозиторий определен следующим образом:

public interface PayloadRepository  extends ElasticsearchRepository<PayloadPojo, String>  {
}

В ES 6.8.1 (Spring Data Elasticsearch 3.2.0 ) Мне удалось без проблем хранить и читать двоичные данные.

Теперь я хотел бы перейти на ES 7.5.2, поэтому я перенес проект на использование Spring Data Elasticsearch 4.0.0. С тех пор, когда я пытаюсь вызвать что-то вроде payloadRepo.findAll(), я получаю исключение преобразования: Failed to convert from type [java.lang.String] to type [byte]. Данные хранятся в виде строки в кодировке base64.

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

Спасибо

1 Ответ

1 голос
/ 14 февраля 2020

FieldType.Binary был добавлен для версии 4.0. До сих пор до сих пор не хватало внутреннего конвертера для преобразования строк, закодированных в byte[] и base64 (двоичный тип поля вasticsearch всегда кодируется в base64).

Я только что добавил это, должно быть в следующем выпуске снимка .

Что касается типов дат: мы добавили поддержку различных форматов даты Elasticsearch и также поддерживаем настраиваемые шаблоны дат - как это делает Elasticsearch. Эта поддержка доступна для классов, реализующих интерфейс java.time.TemporalAccessor - в основном классы java.time.*.

Мы отказались от внутренней поддержки старых классов java.util.Date в пользу классов java.time - java.sql.Timestamp является производным от java.util.Date.

У нас есть критические изменения в версии 4.0, и это одно из них (напоминает об обновлении документации).

...