elasticsearch,Java,Spring Boot,elasticsearch" /> elasticsearch,Java,Spring Boot,elasticsearch" />

Java 未反序列化Spring数据Elasticsearch文档

Java 未反序列化Spring数据Elasticsearch文档,java,spring-boot,elasticsearch,Java,Spring Boot,elasticsearch,Spring数据Elasticsearch版本:3.2.6.0发布 Elasticsearch版本:7.6.2 我正在尝试使用以下方法反序列化商品类别的列表: SearchQuery getAllQuery = new NativeSearchQueryBuilder() .withQuery(matchAllQuery()) .build(); return elasticsearchTemplate.queryForList(getAllQuery, Merc

Spring数据Elasticsearch版本:3.2.6.0发布 Elasticsearch版本:7.6.2

我正在尝试使用以下方法反序列化
商品类别的列表:

SearchQuery getAllQuery = new NativeSearchQueryBuilder()
        .withQuery(matchAllQuery())
        .build();
return elasticsearchTemplate.queryForList(getAllQuery, MerchantCategory.class);
字符串id字段在
MerchsntCategory
列表中设置正确,但其他字段保持为
null

我已经确认文档字段是使用Kibana保存在Elasticsearch中的

启动Spring Boot应用程序时,字段映射将提交给Elasticsearch:

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."]
以下是
商品分类
类:

@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;
}
我也在
merchantCategoryElasticsearchRepository.findAll()上尝试过同样的方法和具有相同的问题


为什么唯一序列化的字段是字符串id字段而不是其他字段?

您是否使用Jackson作为序列化程序

您必须使用:
@JsonProperty

@JsonProperty("UrlName")
private String urlName;
如果使用GSON作为序列化程序,则必须使用
@SerializedName

@SerializedName("UrlName")
private String urlName;

@JsonProperty
@SerializedName
之间有什么区别?JsonProperty是Jackson的一部分,SerializedName是GSONI的一部分如果我理解正确,我遇到的问题是我最初使用的是Gson注释
@SerializedName
。但SpringDataElasticSearch使用Jackson进行反序列化,因此无法识别该注释。因此,切换到
@JsonProperty
可以正确识别和映射字段。
@SerializedName("UrlName")
private String urlName;