Springboot+ElasticSearch整合使用ElasticsearchRepository字段名称为大写时的处理方法
一、问题起因:
错误信息:org.springframework.data.mapping.PropertyReferenceException: No property … ! Did you mean …?
如下图所示,springboot整合es时,在es中的字段名称为大写,此时使用ElasticsearchRepository自动生成查询方法时是有问题的。因为生成的方法采用的是驼峰命名规则,如图中使用“findBySTORETIME”接口,则默认字段值为”sTORETIME”,但我们的字段却为”STORETIME”,所以产生错误!
二、处理方法:
在DAO接口层,接口名称上添加”@Query”注解,如下图所示:
@Query("{\"bool\" : {\"must\" : {\"term\" : {\"STORETIME\" : \"?0\"}}}}")
注解中,规定了字段使用大写表示,则解决了上述问题。其中,"?0"代表第一个参数storetime,后面以此类推
@JsonProperty("DREREFERENCE")的使用,是为了将ES返回的字段内容与字段对应,否则返回字段默认为小写,是不能存储在bean中的