mirror of
https://github.com/spring-projects/spring-framework
synced 2026-06-08 17:33:33 +00:00
Add supportedVersionPredicate to ApiVersionConfigurer
Closes gh-35267
This commit is contained in:
+27
-12
@@ -17,6 +17,7 @@
|
||||
package org.springframework.web.accept;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -44,6 +45,13 @@ public class DefaultApiVersionStrategiesTests {
|
||||
assertThat(strategy.getDefaultVersion()).isEqualTo(parser.parseVersion(version));
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingRequiredVersion() {
|
||||
assertThatThrownBy(() -> validateVersion(null, apiVersionStrategy()))
|
||||
.isInstanceOf(MissingApiVersionException.class)
|
||||
.hasMessage("400 BAD_REQUEST \"API version is required.\"");
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateSupportedVersion() {
|
||||
String version = "1.2";
|
||||
@@ -53,7 +61,7 @@ public class DefaultApiVersionStrategiesTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectUnsupportedVersion() {
|
||||
void validateUnsupportedVersion() {
|
||||
assertThatThrownBy(() -> validateVersion("1.2", apiVersionStrategy()))
|
||||
.isInstanceOf(InvalidApiVersionException.class)
|
||||
.hasMessage("400 BAD_REQUEST \"Invalid API version: '1.2.0'.\"");
|
||||
@@ -62,7 +70,7 @@ public class DefaultApiVersionStrategiesTests {
|
||||
@Test
|
||||
void validateDetectedVersion() {
|
||||
String version = "1.2";
|
||||
DefaultApiVersionStrategy strategy = apiVersionStrategy(null, true);
|
||||
DefaultApiVersionStrategy strategy = apiVersionStrategy(null, true, null);
|
||||
strategy.addMappedVersion(version);
|
||||
validateVersion(version, strategy);
|
||||
}
|
||||
@@ -76,30 +84,37 @@ public class DefaultApiVersionStrategiesTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingRequiredVersion() {
|
||||
assertThatThrownBy(() -> validateVersion(null, apiVersionStrategy()))
|
||||
.isInstanceOf(MissingApiVersionException.class)
|
||||
.hasMessage("400 BAD_REQUEST \"API version is required.\"");
|
||||
void validateSupportedWithPredicate() {
|
||||
SemanticApiVersionParser.Version parsedVersion = parser.parseVersion("1.2");
|
||||
validateVersion("1.2", apiVersionStrategy(null, false, version -> version.equals(parsedVersion)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void validateUnsupportedWithPredicate() {
|
||||
DefaultApiVersionStrategy strategy = apiVersionStrategy(null, false, version -> version.equals("1.2"));
|
||||
assertThatThrownBy(() -> validateVersion("1.2", strategy)).isInstanceOf(InvalidApiVersionException.class);
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy() {
|
||||
return apiVersionStrategy(null, false);
|
||||
return apiVersionStrategy(null, false, null);
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy(@Nullable String defaultVersion) {
|
||||
return apiVersionStrategy(defaultVersion, false);
|
||||
return apiVersionStrategy(defaultVersion, false, null);
|
||||
}
|
||||
|
||||
private static DefaultApiVersionStrategy apiVersionStrategy(
|
||||
@Nullable String defaultVersion, boolean detectSupportedVersions) {
|
||||
@Nullable String defaultVersion, boolean detectSupportedVersions,
|
||||
@Nullable Predicate<Comparable<?>> supportedVersionPredicate) {
|
||||
|
||||
return new DefaultApiVersionStrategy(
|
||||
List.of(request -> request.getParameter("api-version")),
|
||||
new SemanticApiVersionParser(), true, defaultVersion, detectSupportedVersions, null);
|
||||
List.of(request -> request.getParameter("api-version")), new SemanticApiVersionParser(),
|
||||
true, defaultVersion, detectSupportedVersions, supportedVersionPredicate, null);
|
||||
}
|
||||
|
||||
private void validateVersion(@Nullable String version, DefaultApiVersionStrategy strategy) {
|
||||
strategy.validateVersion(version != null ? parser.parseVersion(version) : null, request);
|
||||
Comparable<?> parsedVersion = (version != null ? parser.parseVersion(version) : null);
|
||||
strategy.validateVersion(parsedVersion, request);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user