spring-data-elasticsearch 访问出错。HTTP/1.1 400 Bad Request

问题遇到的现象和发生背景

客户端版本: spring boot 2.6.3,spring data search 4.3.1
服务器版本: es 6.5.1, 集群

问题相关代码,请勿粘贴截图

@Document(indexName = "students")
public class MajorInfo {

    private @Id String id;

    @Field(type = FieldType.Keyword)
    private String country;



@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()  
            .connectedTo("192.168.33.91:9200")
            .build();

        return RestClients.create(clientConfiguration).rest();                         
    }
}


public interface MajorInfoRepository  extends ElasticsearchRepository<MajorInfo, String>{

}

Iterable<MajorInfo> result = majorInfoRepository.findAll();  --》 访问 
运行结果及报错内容
Caused by: org.springframework.data.elasticsearch.RestStatusException: method [HEAD], host [http://192.168.3.11:9200], URI [/student?ignore_throttled=false&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=false], status line [HTTP/1.1 400 Bad Request]; nested exception is ElasticsearchStatusException[method [HEAD], host [http://192.168.3.11:9200], URI [/student?ignore_throttled=false&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=false], status line [HTTP/1.1 400 Bad Request]]; nested: ResponseException[method [HEAD], host [http://192.168.3.11:9200], URI [/student?ignore_throttled=false&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=false], status line [HTTP/1.1 400 Bad Request]];
    at org.springframework.data.elasticsearch.core.ElasticsearchExceptionTranslator.translateExceptionIfPossible(ElasticsearchExceptionTranslator.java:69) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.translateException(ElasticsearchRestTemplate.java:427) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.execute(ElasticsearchRestTemplate.java:410) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.core.RestIndexTemplate.doExists(RestIndexTemplate.java:103) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.core.AbstractIndexTemplate.exists(AbstractIndexTemplate.java:134) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository.<init>(SimpleElasticsearchRepository.java:92) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ~[spring-beans-5.3.15.jar:5.3.15]
    ... 42 common frames omitted
Caused by: org.elasticsearch.ElasticsearchStatusException: method [HEAD], host [http://192.168.3.11:9200], URI [/student?ignore_throttled=false&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=false], status line [HTTP/1.1 400 Bad Request]
    at org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1985) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1745) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1717) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.IndicesClient.exists(IndicesClient.java:963) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    at org.springframework.data.elasticsearch.core.RestIndexTemplate.lambda$doExists$2(RestIndexTemplate.java:103) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    at org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.execute(ElasticsearchRestTemplate.java:408) ~[spring-data-elasticsearch-4.3.1.jar:4.3.1]
    ... 51 common frames omitted
Caused by: org.elasticsearch.client.ResponseException: method [HEAD], host [http://192.168.3.11:9200], URI [/student?ignore_throttled=false&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=false], status line [HTTP/1.1 400 Bad Request]
    at org.elasticsearch.client.RestClient.convertResponse(RestClient.java:326) ~[elasticsearch-rest-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:296) ~[elasticsearch-rest-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:270) ~[elasticsearch-rest-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestHighLevelClient.performClientRequest(RestHighLevelClient.java:2082) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1732) ~[elasticsearch-rest-high-level-client-7.15.2.jar:7.15.2]
    ... 55 common frames omitted



我的解答思路和尝试过的方法

1:官方 spring data search 4.3.1 是支持 elasticsearch 6.5.1. https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.requirements

2:pom.xml 主动降低 elasticsearch版本, <elasticsearch.version>6.5.1</elasticsearch.version>。
出现下面错误:

Caused by: java.lang.ClassNotFoundException: org.elasticsearch.action.ActionType
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na]
    ... 56 common frames omitted

3:不想降低spring-boot的版本

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>  
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

4; 没有找到 修改 http method的地方。 如果 http method修改为get,post 应该可以通过。 命令行curl下,get /post 是 通过的。

我想要达到的结果

正常访问,取出数据。

错误实际是在 初始化bean 触发的。

当下我已经找到 不依赖spring-boot data-elasticsearch的方法,就是 直接发送 json 消息跟 es 交互。

数据格式不对

看报错应该是bean初始化的问题

试试更换版本或者重新编译项目试试

前端是用什么技术发送请求的,参数格式错误,应该要把参数封装为对象。

你是不是在spring-boot配置文件中配置了权限过滤

出现400提示,肯定是请求方式错了!

400,看报错应该是bean初始化的问题

400是地址或参数什么的不对吧