Документы Spring Data Elasticsearch не десериализуются - PullRequest
0 голосов
/ 05 мая 2020

Spring Data Версия Elasticsearch: 3.2.6.RELEASE Версия Elasticsearch: 7.6.2

Я пытаюсь десериализовать список MerchantCategory, используя:

SearchQuery getAllQuery = new NativeSearchQueryBuilder()
        .withQuery(matchAllQuery())
        .build();
return elasticsearchTemplate.queryForList(getAllQuery, MerchantCategory.class);

String id поле правильно установлено в списке MerchsntCategory, но остальные поля остаются null.

Я подтвердил, что поля документов сохраняются в Elasticsearch с помощью Kibana.

Отображения полей отправлено в Elasticsearch при запуске приложения Spring Boot:

request [PUT http://127.0.0.1:9200/merchantcategory/_mapping/merchantcategory?master_timeout=30s&include_type_name=true&timeout=30s] returned 1 warnings: [299 Elasticsearch-7.6.2-ef48eb35cf30adf4db14086e8aabd07ef6fb113f "[types removal] Using include_type_name in put mapping requests is deprecated. The parameter will be removed in the next major version."]

Вот класс MerchantCategory:

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Document(indexName = "merchantcategory", type = "merchantcategory")
public class MerchantCategory implements Serializable {

    @Id
    @JsonIgnore
    private String id;

    @SerializedName("ParentId")
    private Long parentId;

    @SerializedName("Name")
    private String name;

    @SerializedName("Description")
    private String description;

    @SerializedName("UrlName")
    private String urlName;

    @SerializedName("Id")
    private Long categoryId;

    @SerializedName("MerchantsInCategory")
    private List<MerchantCategoryRelationship> merchants;
}

Я использую gson для сериализации:

val bulkRequest = new BulkRequest();
entities.subList(startIndex, endIndex).forEach(e ->{
    String source = gson.toJson(e);
    val indexRequest = new IndexRequest(index).source(source, XContentType.JSON).type(type);
        bulkRequest.add(indexRequest);
});

highLevelClient.bulkAsync(bulkRequest, RequestOptions.DEFAULT, getListener());

Я тоже пробовал то же самое с merchantCategoryElasticsearchRepository.findAll();, и у меня такая же проблема.

Почему сериализуется только поле String id, а не остальные?

1 Ответ

1 голос
/ 05 мая 2020

Вы используете Джексона как сериализатор?

Чем вам нужно использовать: @JsonProperty

@JsonProperty("UrlName")
private String urlName;

Если вы используете GSON в качестве сериализатора, вы должны использовать @SerializedName.

@SerializedName("UrlName")
private String urlName;
...