Java 未反序列化Spring数据Elasticsearch文档
Spring数据Elasticsearch版本:3.2.6.0发布 Elasticsearch版本:7.6.2 我正在尝试使用以下方法反序列化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
商品类别的列表:
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;