ClassNotFoundException:Spring boot 中的 com.fasterxml.jackson.core.util.JacksonFeature,从 Elasticsearch HLRC 升级到 Java API 客户端

Pom*_*rin 3 maven elasticsearch spring-boot elasticsearch-java-api

我想用 Elasticsearch 的新 Java API 客户端替换已弃用的高级 Rest 客户端。问题是,我不确定我的依赖项是否配置正确!我遇到了这个错误:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.util.JacksonFeature
Run Code Online (Sandbox Code Playgroud)

Elasticsearch 刚刚升级到 7.17.3,Spring Boot 现在是 2.2.8,稍后会升级,但我不确定这是否是问题所在?这是我在 pom 中的依赖项:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-webmvc-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>7.17.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

我按照Elasticsearch的文档进行操作,因此我也尝试使用 2.12.3 版本的 jackson-databind,但错误仍然存​​在。知道应该改变什么吗?谢谢!

编辑:以防万一它有帮助,这也是我的客户,这是需要依赖项的地方(我假设)

@Configuration
public class ElasticsearchClient{

   RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();
   ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
   public ElasticsearchClient client = new ElasticsearchClient(transport);
}
Run Code Online (Sandbox Code Playgroud)

(我必须把公众放在客户面前,因为它位于另一个包下,除非它在那里,否则不会让我调用它)

玩玩后的更多信息:事实证明有一个父级,它会加载一个较旧的杰克逊数据绑定,所以我做了以下操作

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-schema-registry-client</artifactId>
            <exclusions>
                <exclusion> 
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                </exclusion>
            </exclusions>
</dependency>
<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

仍然不起作用,所以我现在 200% 没有想法了

小智 6

添加 jackson-core 解决了我的问题。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.12.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)