java.lang.NoSuchMethodError: 'reactor.util.context.ContextViewreactor.core.publisher.MonoSink.contextView()'

Asw*_*gan 6 java spring-boot project-reactor

将 Spring Boot 版本从 2.6.6 升级到 2.6.7 后,我在执行 Web 客户端休息调用时遇到以下错误。任何想法?

示例代码

public void execute(BiConsumer<ResponseEntity<JsonNode>, Throwable> responseConsumer) {
    WebClient.RequestBodyUriSpec uriSpec = getUriSpec();
    Mono<ResponseEntity<JsonNode>> responseEntityMono = uriSpec
            .uri(this::buildUri)//"localhost:1234")//
            .headers(this::setHeaders)
            .body(insertBody())
            .retrieve().onRawStatus(i -> i == 599,
            response -> response.bodyToMono(String.class)
                .map(body -> new ExternalException(599, body)))
            .toEntity(JsonNode.class);
    CompletableFuture<ResponseEntity<JsonNode>> completableFuture = responseEntityMono.toFuture();
    completableFuture.whenCompleteAsync(responseConsumer);
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*pez 5

找不到的方法在MonoSink类中(在reactor-core项目中):https://github.com/reactor/reactor-core/blob/main/reactor-core/src/main/java/reactor /core/publisher/MonoSink.java

由于这是从 spring boot 版本 2.6.6 升级后遇到的异常,我猜想找不到它的类是 HttpClientConnect (在项目reactor-netty-http中)。不过,如果有整个堆栈异常就好了。

@jianjianbo 说得没错,你需要更新reactor-core 来解决这个问题,但不需要更新到3.4.3 版本。它至少应该是 3.4.17 版本(也就是说我会采用最新版本,在撰写本文时这是 3.4.19)。正如您在版本 3.4.16 中看到的 contextView() 尚未创建:https ://github.com/reactor/reactor-core/blob/v3.4.16/reactor-core/src/main/java/reactor/core /publisher/MonoSink.java


小智 5

升级pom.xml

<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.5.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 4

升级你的pom.xml

<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.4.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)