Inject UriComponentsBuilder relative to webapp root

Issue: SPR-16813
This commit is contained in:
Rossen Stoyanchev 2018-05-11 09:52:02 -04:00
parent 4da43de7e1
commit 7f954ebc32
2 changed files with 7 additions and 3 deletions

View File

@ -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.fromUri(exchange.getRequest().getURI());
URI uri = exchange.getRequest().getURI();
return UriComponentsBuilder.fromUri(uri).replacePath(null).replaceQuery(null);
}
else {
// should never happen...

View File

@ -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();
@ -104,7 +106,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());
}