Итак, у меня есть следующий класс:
@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 ... с быстрым обходом.