diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java index 2547180a..94a2141b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java @@ -123,9 +123,7 @@ public class FeignLoadBalancer extends request.headers()); // Apache client barfs if you set the content length headers.remove(Util.CONTENT_LENGTH); - return new RequestTemplate().method(request.method()) - .append(getUri().toASCIIString()) - .body(request.body(), request.charset()).headers(headers).request(); + return Request.create(request.method(),getUri().toASCIIString(),headers,request.body(),request.charset()); } Request toRequest() { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancerTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancerTests.java index cb9ad67a..c5a60993 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancerTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancerTests.java @@ -18,6 +18,7 @@ import static org.mockito.Mockito.when; import java.net.URI; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import org.junit.Before; import org.junit.Test; @@ -113,4 +114,21 @@ public class FeignLoadBalancerTests { new URI("http://bar/")); assertThat(uri, is(new URI("https://foo:443/"))); } + + @Test + @SneakyThrows + public void testRibbonRequestURLEncode() { + String url = "http://foo/?name=%7bcookie";//name={cookie + Request request = Request.create("GET",url,new HashMap(),null,null); + + assertThat(request.url(),is(url)); + + RibbonRequest ribbonRequest = new RibbonRequest(this.delegate,request,new URI(request.url())); + + Request cloneRequest = ribbonRequest.toRequest(); + + assertThat(cloneRequest.url(),is(url)); + + } + }