Skip to content

Commit 00b7b6c

Browse files
author
Drew Teeter
committed
Switches body parameter substitution to use encoded parameters
Resolves issue where some characters (+ %..) would end up double decoded if existing in parameters. Fixes OpenFeign#264
1 parent a1754a2 commit 00b7b6c

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public RequestTemplate resolve(Map<String, ?> unencoded) {
229229
headers.clear();
230230
headers.putAll(resolvedHeaders);
231231
if (bodyTemplate != null) {
232-
body(urlDecode(expand(bodyTemplate, unencoded)));
232+
body(urlDecode(expand(bodyTemplate, encoded)));
233233
}
234234
return this;
235235
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,26 @@ public void resolveTemplateWithBodyTemplateSetsBodyAndContentLength() {
197197
);
198198
}
199199

200+
@Test
201+
public void resolveTemplateWithBodyTemplateDoesNotDoubleDecode() {
202+
RequestTemplate template = new RequestTemplate().method("POST")
203+
.bodyTemplate(
204+
"%7B\"customer_name\": \"{customer_name}\", \"user_name\": \"{user_name}\", \"password\": \"{password}\"%7D");
205+
206+
template = template.resolve(
207+
mapOf(
208+
"customer_name", "netflix",
209+
"user_name", "denominator",
210+
"password", "abc+123%25d8"
211+
)
212+
);
213+
214+
assertThat(template)
215+
.hasBody(
216+
"{\"customer_name\": \"netflix\", \"user_name\": \"denominator\", \"password\": \"abc+123%25d8\"}"
217+
);
218+
}
219+
200220
@Test
201221
public void skipUnresolvedQueries() throws Exception {
202222
RequestTemplate template = new RequestTemplate().method("GET")//

0 commit comments

Comments
 (0)