Browse Source

Switches body parameter substitution to use encoded parameters

Resolves issue where some characters (+ %..) would end up double decoded if existing in parameters.

Fixes #264
pull/268/head
Drew Teeter 10 years ago
parent
commit
00b7b6c82f
  1. 2
      core/src/main/java/feign/RequestTemplate.java
  2. 20
      core/src/test/java/feign/RequestTemplateTest.java

2
core/src/main/java/feign/RequestTemplate.java

@ -229,7 +229,7 @@ public final class RequestTemplate implements Serializable {
headers.clear(); headers.clear();
headers.putAll(resolvedHeaders); headers.putAll(resolvedHeaders);
if (bodyTemplate != null) { if (bodyTemplate != null) {
body(urlDecode(expand(bodyTemplate, unencoded))); body(urlDecode(expand(bodyTemplate, encoded)));
} }
return this; return this;
} }

20
core/src/test/java/feign/RequestTemplateTest.java

@ -197,6 +197,26 @@ public class RequestTemplateTest {
); );
} }
@Test
public void resolveTemplateWithBodyTemplateDoesNotDoubleDecode() {
RequestTemplate template = new RequestTemplate().method("POST")
.bodyTemplate(
"%7B\"customer_name\": \"{customer_name}\", \"user_name\": \"{user_name}\", \"password\": \"{password}\"%7D");
template = template.resolve(
mapOf(
"customer_name", "netflix",
"user_name", "denominator",
"password", "abc+123%25d8"
)
);
assertThat(template)
.hasBody(
"{\"customer_name\": \"netflix\", \"user_name\": \"denominator\", \"password\": \"abc+123%25d8\"}"
);
}
@Test @Test
public void skipUnresolvedQueries() throws Exception { public void skipUnresolvedQueries() throws Exception {
RequestTemplate template = new RequestTemplate().method("GET")// RequestTemplate template = new RequestTemplate().method("GET")//

Loading…
Cancel
Save