Browse Source

Add defaultVersion to set of supported versions

Closes gh-35755
pull/34993/merge
rstoyanchev 1 month ago
parent
commit
721c40b5c5
  1. 4
      spring-web/src/main/java/org/springframework/web/accept/DefaultApiVersionStrategy.java
  2. 23
      spring-web/src/test/java/org/springframework/web/accept/DefaultApiVersionStrategiesTests.java
  3. 4
      spring-webflux/src/main/java/org/springframework/web/reactive/accept/DefaultApiVersionStrategy.java
  4. 23
      spring-webflux/src/test/java/org/springframework/web/reactive/accept/DefaultApiVersionStrategiesTests.java

4
spring-web/src/main/java/org/springframework/web/accept/DefaultApiVersionStrategy.java

@ -90,6 +90,10 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy { @@ -90,6 +90,10 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
this.detectSupportedVersions = detectSupportedVersions;
this.supportedVersionPredicate = initSupportedVersionPredicate(supportedVersionPredicate);
this.deprecationHandler = deprecationHandler;
if (defaultVersion != null) {
addSupportedVersion(defaultVersion);
}
}
private Predicate<Comparable<?>> initSupportedVersionPredicate(@Nullable Predicate<Comparable<?>> predicate) {

23
spring-web/src/test/java/org/springframework/web/accept/DefaultApiVersionStrategiesTests.java

@ -46,7 +46,7 @@ public class DefaultApiVersionStrategiesTests { @@ -46,7 +46,7 @@ public class DefaultApiVersionStrategiesTests {
@Test
void missingRequiredVersion() {
assertThatThrownBy(() -> validateVersion(null, apiVersionStrategy()))
assertThatThrownBy(() -> testValidate(null, apiVersionStrategy()))
.isInstanceOf(MissingApiVersionException.class)
.hasMessage("400 BAD_REQUEST \"API version is required.\"");
}
@ -56,12 +56,19 @@ public class DefaultApiVersionStrategiesTests { @@ -56,12 +56,19 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy();
strategy.addSupportedVersion(version);
validateVersion(version, strategy);
testValidate(version, strategy);
}
@Test
void validateSupportedVersionForDefaultVersion() {
String defaultVersion = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy(defaultVersion);
testValidate(defaultVersion, strategy);
}
@Test
void validateUnsupportedVersion() {
assertThatThrownBy(() -> validateVersion("1.2", apiVersionStrategy()))
assertThatThrownBy(() -> testValidate("1.2", apiVersionStrategy()))
.isInstanceOf(InvalidApiVersionException.class)
.hasMessage("400 BAD_REQUEST \"Invalid API version: '1.2.0'.\"");
}
@ -71,7 +78,7 @@ public class DefaultApiVersionStrategiesTests { @@ -71,7 +78,7 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy(null, true, null);
strategy.addMappedVersion(version);
validateVersion(version, strategy);
testValidate(version, strategy);
}
@Test
@ -79,19 +86,19 @@ public class DefaultApiVersionStrategiesTests { @@ -79,19 +86,19 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy();
strategy.addMappedVersion(version);
assertThatThrownBy(() -> validateVersion(version, strategy)).isInstanceOf(InvalidApiVersionException.class);
assertThatThrownBy(() -> testValidate(version, strategy)).isInstanceOf(InvalidApiVersionException.class);
}
@Test
void validateSupportedWithPredicate() {
SemanticApiVersionParser.Version parsedVersion = parser.parseVersion("1.2");
validateVersion("1.2", apiVersionStrategy(null, false, version -> version.equals(parsedVersion)));
testValidate("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);
assertThatThrownBy(() -> testValidate("1.2", strategy)).isInstanceOf(InvalidApiVersionException.class);
}
@Test
@ -121,7 +128,7 @@ public class DefaultApiVersionStrategiesTests { @@ -121,7 +128,7 @@ public class DefaultApiVersionStrategiesTests {
null, defaultVersion, detectSupportedVersions, supportedVersionPredicate, null);
}
private void validateVersion(@Nullable String version, DefaultApiVersionStrategy strategy) {
private void testValidate(@Nullable String version, DefaultApiVersionStrategy strategy) {
MockHttpServletRequest request = new MockHttpServletRequest();
if (version != null) {
request.setParameter("api-version", version);

4
spring-webflux/src/main/java/org/springframework/web/reactive/accept/DefaultApiVersionStrategy.java

@ -92,6 +92,10 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy { @@ -92,6 +92,10 @@ public class DefaultApiVersionStrategy implements ApiVersionStrategy {
this.detectSupportedVersions = detectSupportedVersions;
this.supportedVersionPredicate = initSupportedVersionPredicate(supportedVersionPredicate);
this.deprecationHandler = deprecationHandler;
if (defaultVersion != null) {
addSupportedVersion(defaultVersion);
}
}
private Predicate<Comparable<?>> initSupportedVersionPredicate(@Nullable Predicate<Comparable<?>> predicate) {

23
spring-webflux/src/test/java/org/springframework/web/reactive/accept/DefaultApiVersionStrategiesTests.java

@ -50,7 +50,7 @@ public class DefaultApiVersionStrategiesTests { @@ -50,7 +50,7 @@ public class DefaultApiVersionStrategiesTests {
@Test
void missingRequiredVersion() {
assertThatThrownBy(() -> validateVersion(null, apiVersionStrategy()))
assertThatThrownBy(() -> testValidate(null, apiVersionStrategy()))
.isInstanceOf(MissingApiVersionException.class)
.hasMessage("400 BAD_REQUEST \"API version is required.\"");
}
@ -60,12 +60,19 @@ public class DefaultApiVersionStrategiesTests { @@ -60,12 +60,19 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy();
strategy.addSupportedVersion(version);
validateVersion(version, strategy);
testValidate(version, strategy);
}
@Test
void validateSupportedVersionForDefaultVersion() {
String defaultVersion = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy(defaultVersion, false, null);
testValidate(defaultVersion, strategy);
}
@Test
void validateUnsupportedVersion() {
assertThatThrownBy(() -> validateVersion("1.2", apiVersionStrategy()))
assertThatThrownBy(() -> testValidate("1.2", apiVersionStrategy()))
.isInstanceOf(InvalidApiVersionException.class)
.hasMessage("400 BAD_REQUEST \"Invalid API version: '1.2.0'.\"");
}
@ -75,7 +82,7 @@ public class DefaultApiVersionStrategiesTests { @@ -75,7 +82,7 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy(null, true, null);
strategy.addMappedVersion(version);
validateVersion(version, strategy);
testValidate(version, strategy);
}
@Test
@ -83,19 +90,19 @@ public class DefaultApiVersionStrategiesTests { @@ -83,19 +90,19 @@ public class DefaultApiVersionStrategiesTests {
String version = "1.2";
DefaultApiVersionStrategy strategy = apiVersionStrategy();
strategy.addMappedVersion(version);
assertThatThrownBy(() -> validateVersion(version, strategy)).isInstanceOf(InvalidApiVersionException.class);
assertThatThrownBy(() -> testValidate(version, strategy)).isInstanceOf(InvalidApiVersionException.class);
}
@Test
void validateSupportedWithPredicate() {
SemanticApiVersionParser.Version parsedVersion = parser.parseVersion("1.2");
validateVersion("1.2", apiVersionStrategy(null, false, version -> version.equals(parsedVersion)));
testValidate("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);
assertThatThrownBy(() -> testValidate("1.2", strategy)).isInstanceOf(InvalidApiVersionException.class);
}
@Test
@ -121,7 +128,7 @@ public class DefaultApiVersionStrategiesTests { @@ -121,7 +128,7 @@ public class DefaultApiVersionStrategiesTests {
parser, null, defaultVersion, detectSupportedVersions, supportedVersionPredicate, null);
}
private void validateVersion(@Nullable String version, DefaultApiVersionStrategy strategy) {
private void testValidate(@Nullable String version, DefaultApiVersionStrategy strategy) {
MockServerHttpRequest.BaseBuilder<?> requestBuilder = MockServerHttpRequest.get("/");
if (version != null) {
requestBuilder.queryParam("api-version", version);

Loading…
Cancel
Save