From bd5d00c08275b89302c79a4e77534a6e712dfe2b Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 18 May 2015 21:51:58 -0600 Subject: [PATCH] encode uri if needed fixes gh-347 --- .../netflix/zuul/filters/route/RibbonCommand.java | 7 +++++-- .../zuul/SampleZuulProxyApplicationTests.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java index 7cd09efe..ce079ab4 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonCommand.java @@ -21,6 +21,10 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.List; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponentsBuilder; + import com.netflix.client.http.HttpRequest; import com.netflix.client.http.HttpRequest.Builder; import com.netflix.client.http.HttpRequest.Verb; @@ -35,7 +39,6 @@ import com.netflix.hystrix.HystrixCommandProperties.ExecutionIsolationStrategy; import com.netflix.niws.client.http.RestClient; import com.netflix.zuul.constants.ZuulConstants; import com.netflix.zuul.context.RequestContext; -import org.springframework.util.MultiValueMap; /** * Hystrix wrapper around Eureka Ribbon command @@ -77,7 +80,7 @@ public class RibbonCommand extends HystrixCommand { super(getSetter(commandKey)); this.restClient = restClient; this.verb = verb; - this.uri = new URI(uri); + this.uri = (StringUtils.hasText(uri))? UriComponentsBuilder.fromUriString(uri).build().toUri() : new URI(uri); this.retryable = retryable; this.headers = headers; this.params = params; diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java index 50f127c2..994693b9 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/SampleZuulProxyApplicationTests.java @@ -132,6 +132,15 @@ public class SampleZuulProxyApplicationTests { assertEquals("Gotten 1!", result.getBody()); } + @Test + public void routeWithSpace() { + ResponseEntity result = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/simple/spa ce", + HttpMethod.GET, new HttpEntity<>((Void) null), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("Hello space", result.getBody()); + } + } // Don't use @SpringBootApplication because we don't want to component scan @@ -169,6 +178,11 @@ class SampleZuulProxyApplication { return "Hello world"; } + @RequestMapping("/spa ce") + public String space() { + return "Hello space"; + } + @Bean public ZuulFilter sampleFilter() { return new ZuulFilter() {