From fd36af6fcfe415e39ba314761010756043a1722d Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 11 May 2018 09:52:02 -0400 Subject: [PATCH] Inject UriComponentsBuilder relative to webapp root Issue: SPR-16813 --- .../annotation/ServerWebExchangeArgumentResolver.java | 4 +++- .../annotation/ServerWebExchangeArgumentResolverTests.java | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolver.java index 7577b9ae35..6470f34e24 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolver.java @@ -16,6 +16,7 @@ package org.springframework.web.reactive.result.method.annotation; +import java.net.URI; import java.time.ZoneId; import java.util.Locale; import java.util.TimeZone; @@ -109,7 +110,8 @@ public class ServerWebExchangeArgumentResolver extends HandlerMethodArgumentReso return timeZone != null ? timeZone.toZoneId() : ZoneId.systemDefault(); } else if (UriBuilder.class == paramType || UriComponentsBuilder.class == paramType) { - return UriComponentsBuilder.fromHttpRequest(exchange.getRequest()); + URI uri = exchange.getRequest().getURI(); + return UriComponentsBuilder.fromUri(uri).replacePath(null).replaceQuery(null); } else { // should never happen... diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java index 661c8462d4..e631deda8a 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeArgumentResolverTests.java @@ -20,6 +20,7 @@ import java.time.ZoneId; import java.util.Locale; import java.util.TimeZone; +import org.junit.Before; import org.junit.Test; import reactor.core.publisher.Mono; @@ -52,7 +53,8 @@ public class ServerWebExchangeArgumentResolverTests { private final ServerWebExchangeArgumentResolver resolver = new ServerWebExchangeArgumentResolver(ReactiveAdapterRegistry.getSharedInstance()); - private final MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path")); + private final MockServerWebExchange exchange = MockServerWebExchange.from( + MockServerHttpRequest.get("http://example.org:9999/path?q=foo")); private ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build(); @@ -103,7 +105,7 @@ public class ServerWebExchangeArgumentResolverTests { assertNotNull(value); assertEquals(UriComponentsBuilder.class, value.getClass()); - assertEquals("/path/next", ((UriComponentsBuilder) value).path("/next").build().toUriString()); + assertEquals("http://example.org:9999/next", ((UriComponentsBuilder) value).path("/next").toUriString()); }