diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/VersionRequestCondition.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/VersionRequestCondition.java index 5d701f28f30..45302f7af2b 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/VersionRequestCondition.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/VersionRequestCondition.java @@ -149,8 +149,7 @@ public final class VersionRequestCondition extends AbstractRequestCondition version = exchange.getAttribute(HandlerMapping.API_VERSION_ATTRIBUTE); - Assert.state(version != null, "No API version attribute"); - if (!this.version.equals(version)) { + if (version != null && !this.version.equals(version)) { throw new NotAcceptableApiVersionException(version.toString()); } } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/condition/VersionRequestConditionTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/condition/VersionRequestConditionTests.java index 2103ccc3542..0f57ce25d26 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/condition/VersionRequestConditionTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/condition/VersionRequestConditionTests.java @@ -148,6 +148,17 @@ public class VersionRequestConditionTests { assertThat(list.get(0)).isEqualTo(condition(expected)); } + @Test // gh-35236 + void noRequestVersion() { + MockServerWebExchange exchange = exchange(); + VersionRequestCondition condition = condition("1.1"); + + VersionRequestCondition match = condition.getMatchingCondition(exchange); + assertThat(match).isSameAs(condition); + + condition.handleMatch(exchange); + } + private VersionRequestCondition condition(String v) { this.strategy.addSupportedVersion(v.endsWith("+") ? v.substring(0, v.length() - 1) : v); return new VersionRequestCondition(v, this.strategy); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/VersionRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/VersionRequestCondition.java index fd824ee8305..dce48a3b651 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/VersionRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/VersionRequestCondition.java @@ -148,8 +148,7 @@ public final class VersionRequestCondition extends AbstractRequestCondition version = (Comparable) request.getAttribute(HandlerMapping.API_VERSION_ATTRIBUTE); - Assert.state(version != null, "No API version attribute"); - if (!this.version.equals(version)) { + if (version != null && !this.version.equals(version)) { throw new NotAcceptableApiVersionException(version.toString()); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/VersionRequestConditionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/VersionRequestConditionTests.java index 27c70960083..543de9e18f7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/VersionRequestConditionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/VersionRequestConditionTests.java @@ -146,6 +146,17 @@ public class VersionRequestConditionTests { assertThat(list.get(0)).isEqualTo(condition(expected)); } + @Test // gh-35236 + void noRequestVersion() { + MockHttpServletRequest request = new MockHttpServletRequest("GET", "/path"); + VersionRequestCondition condition = condition("1.1"); + + VersionRequestCondition match = condition.getMatchingCondition(request); + assertThat(match).isSameAs(condition); + + condition.handleMatch(request); + } + private VersionRequestCondition condition(String v) { this.strategy.addSupportedVersion(v.endsWith("+") ? v.substring(0, v.length() - 1) : v); return new VersionRequestCondition(v, this.strategy);