Elasti c Поиск в записи @Field, вызывающей java .lang.IllegalArgumentException: тип не должен быть нулевым - PullRequest
0 голосов
/ 04 февраля 2020

Итак, у меня есть следующий класс:

@Document(indexName = "abc-index300", type = "abc-type") @Data @Builder @NoArgsConstructor @AllArgsConstructor
    @Setting(settingPath = "/elastic/settings.json")
    public static class DirectiveEntry { 

    @Id private String id;
        ...
    @Field(type = FieldType.Object, index = false) private GenericComponent<IdAndText> leadManager;

И у меня также есть следующий класс:

@JsonSerialize(
    using = GeneriComponentSerializer.class
)
public class GeneriComponent<T> {
    private T value;
    private List<T> values;

GeneriComponent использует дженерики, и я подозреваю, что фактически не назначено класс к значению - когда elasti c пытается использовать отражение.

Я получаю следующую ошибку:

Caused by: java.lang.IllegalArgumentException: Type must not be null!
    at org.springframework.util.Assert.notNull(Assert.java:193)
    at org.springframework.data.mapping.model.SimpleTypeHolder.isSimpleType(SimpleTypeHolder.java:145)
    at org.springframework.data.elasticsearch.core.MappingBuilder.isEntity(MappingBuilder.java:327)
    at org.springframework.data.elasticsearch.core.MappingBuilder.mapEntity(MappingBuilder.java:137)
    at org.springframework.data.elasticsearch.core.MappingBuilder.mapEntity(MappingBuilder.java:142)
    at org.springframework.data.elasticsearch.core.MappingBuilder.buildMapping(MappingBuilder.java:93)
    at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.putMapping(ElasticsearchTemplate.java:217)

Что такое хорошее решение ???

Я рассмотрел вопрос об изменении поля в строку и просто преобразовании его в строку JSON ... с быстрым обходом.

...