From 48506db9962ec6937731ee8c810c731ed624af4c Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Fri, 25 Jul 2025 06:04:53 +0100 Subject: [PATCH] Avoid IllegalStateException for unversioned request Closes gh-35236 --- .../result/condition/VersionRequestCondition.java | 3 +-- .../condition/VersionRequestConditionTests.java | 11 +++++++++++ .../mvc/condition/VersionRequestCondition.java | 3 +-- .../mvc/condition/VersionRequestConditionTests.java | 11 +++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) 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);