mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-17 08:24:13 +00:00
Merge branch '7.0.x'
This commit is contained in:
+1
-1
@@ -169,7 +169,7 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
|
||||
@Override
|
||||
public Mono<String> resolveApiVersion(ServerWebExchange exchange) {
|
||||
return Flux.fromIterable(this.versionResolvers)
|
||||
.flatMap(resolver -> resolver instanceof AsyncApiVersionResolver asyncResolver ?
|
||||
.concatMap(resolver -> resolver instanceof AsyncApiVersionResolver asyncResolver ?
|
||||
asyncResolver.resolveVersionAsync(exchange) :
|
||||
Mono.justOrEmpty(resolver.resolveVersion(exchange)))
|
||||
.next();
|
||||
|
||||
+33
@@ -23,6 +23,7 @@ import org.jspecify.annotations.Nullable;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
import reactor.test.publisher.TestPublisher;
|
||||
|
||||
import org.springframework.web.accept.InvalidApiVersionException;
|
||||
import org.springframework.web.accept.MissingApiVersionException;
|
||||
@@ -128,10 +129,42 @@ class DefaultApiVersionStrategiesTests {
|
||||
.withMessage("versionRequired cannot be set to true if a defaultVersion is also configured");
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveVersionWithResolversInOrder() {
|
||||
TestPublisher<String> firstResolverPublisher = TestPublisher.create();
|
||||
ApiVersionStrategy strategy = apiVersionStrategy(List.of(
|
||||
(AsyncApiVersionResolver) exchange -> firstResolverPublisher.flux().next(),
|
||||
(AsyncApiVersionResolver) exchange -> Mono.just("2.0")));
|
||||
|
||||
StepVerifier.create(strategy.resolveApiVersion(
|
||||
MockServerWebExchange.from(MockServerHttpRequest.get("/"))))
|
||||
.then(() -> firstResolverPublisher.emit("1.0"))
|
||||
.expectNext("1.0")
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveVersionPropagatesErrorFromEarlierResolver() {
|
||||
TestPublisher<String> firstResolverPublisher = TestPublisher.create();
|
||||
ApiVersionStrategy strategy = apiVersionStrategy(List.of(
|
||||
(AsyncApiVersionResolver) exchange -> firstResolverPublisher.flux().next(),
|
||||
(AsyncApiVersionResolver) exchange -> Mono.just("2.0")));
|
||||
|
||||
StepVerifier.create(strategy.resolveApiVersion(
|
||||
MockServerWebExchange.from(MockServerHttpRequest.get("/"))))
|
||||
.then(() -> firstResolverPublisher.error(new IllegalStateException("test")))
|
||||
.expectErrorMessage("test")
|
||||
.verify();
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy() {
|
||||
return apiVersionStrategy(null, false, null);
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy(List<ApiVersionResolver> resolvers) {
|
||||
return new DefaultApiVersionStrategy(resolvers, parser, null, null, false, null, null);
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy(
|
||||
@Nullable String defaultVersion, boolean detectSupportedVersions,
|
||||
@Nullable Predicate<Comparable<?>> supportedVersionPredicate) {
|
||||
|
||||
Reference in New Issue
Block a user