mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-23 06:29:10 +00:00
Add supportedVersionPredicate to ApiVersionConfigurer
Closes gh-35267
This commit is contained in:
+13
-7
@@ -20,6 +20,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@@ -50,6 +51,8 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
|
||||
|
||||
private final Set<Comparable<?>> detectedVersions = new TreeSet<>();
|
||||
|
||||
private final Predicate<Comparable<?>> supportedVersionPredicate;
|
||||
|
||||
private final @Nullable ApiVersionDeprecationHandler deprecationHandler;
|
||||
|
||||
|
||||
@@ -71,7 +74,8 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
|
||||
*/
|
||||
public DefaultApiVersionStrategy(
|
||||
List<ApiVersionResolver> versionResolvers, ApiVersionParser<?> versionParser,
|
||||
boolean versionRequired, @Nullable String defaultVersion, boolean detectSupportedVersions,
|
||||
boolean versionRequired, @Nullable String defaultVersion,
|
||||
boolean detectSupportedVersions, @Nullable Predicate<Comparable<?>> supportedVersionPredicate,
|
||||
@Nullable ApiVersionDeprecationHandler deprecationHandler) {
|
||||
|
||||
Assert.notEmpty(versionResolvers, "At least one ApiVersionResolver is required");
|
||||
@@ -82,9 +86,16 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
|
||||
this.versionRequired = (versionRequired && defaultVersion == null);
|
||||
this.defaultVersion = (defaultVersion != null ? versionParser.parseVersion(defaultVersion) : null);
|
||||
this.detectSupportedVersions = detectSupportedVersions;
|
||||
this.supportedVersionPredicate = initSupportedVersionPredicate(supportedVersionPredicate);
|
||||
this.deprecationHandler = deprecationHandler;
|
||||
}
|
||||
|
||||
private Predicate<Comparable<?>> initSupportedVersionPredicate(@Nullable Predicate<Comparable<?>> predicate) {
|
||||
return (predicate != null ? predicate :
|
||||
(version -> (this.supportedVersions.contains(version) ||
|
||||
this.detectSupportedVersions && this.detectedVersions.contains(version))));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public @Nullable Comparable<?> getDefaultVersion() {
|
||||
@@ -160,16 +171,11 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isSupportedVersion(requestVersion)) {
|
||||
if (!this.supportedVersionPredicate.test(requestVersion)) {
|
||||
throw new InvalidApiVersionException(requestVersion.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isSupportedVersion(Comparable<?> requestVersion) {
|
||||
return (this.supportedVersions.contains(requestVersion) ||
|
||||
this.detectSupportedVersions && this.detectedVersions.contains(requestVersion));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleDeprecations(Comparable<?> version, HttpServletRequest request, HttpServletResponse response) {
|
||||
if (this.deprecationHandler != null) {
|
||||
|
||||
Reference in New Issue
Block a user