Skip to content

Commit a6fc182

Browse files
mroccyenvelo
andauthored
fix: Undefined value in @QueryMap params works not as described (OpenFeign#1585)
Co-authored-by: Marvin Froeder <[email protected]>
1 parent 7146e35 commit a6fc182

2 files changed

Lines changed: 36 additions & 3 deletions

File tree

core/src/main/java/feign/ReflectiveFeign.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,11 +320,14 @@ private RequestTemplate addQueryMapQueryParameters(Map<String, Object> queryMap,
320320
: encoded ? value.toString() : UriUtils.encode(value.toString()));
321321
}
322322
} else {
323-
values.add(currValue == null ? null
324-
: encoded ? currValue.toString() : UriUtils.encode(currValue.toString()));
323+
if (currValue != null) {
324+
values.add(encoded ? currValue.toString() : UriUtils.encode(currValue.toString()));
325+
}
325326
}
326327

327-
mutable.query(encoded ? currEntry.getKey() : UriUtils.encode(currEntry.getKey()), values);
328+
if (values.size() > 0) {
329+
mutable.query(encoded ? currEntry.getKey() : UriUtils.encode(currEntry.getKey()), values);
330+
}
328331
}
329332
return mutable;
330333
}

core/src/test/java/feign/FeignTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,36 @@ public void queryMap() throws Exception {
314314
.hasPath("/?name=alice&fooKey=fooValue");
315315
}
316316

317+
@Test
318+
public void queryMapWithNull() throws Exception {
319+
server.enqueue(new MockResponse());
320+
321+
TestInterface api = new TestInterfaceBuilder().target("http://localhost:" + server.getPort());
322+
323+
Map<String, Object> queryMap = new LinkedHashMap<>();
324+
queryMap.put("name", "alice");
325+
queryMap.put("fooKey", null);
326+
api.queryMap(queryMap);
327+
328+
assertThat(server.takeRequest())
329+
.hasPath("/?name=alice");
330+
}
331+
332+
@Test
333+
public void queryMapWithEmpty() throws Exception {
334+
server.enqueue(new MockResponse());
335+
336+
TestInterface api = new TestInterfaceBuilder().target("http://localhost:" + server.getPort());
337+
338+
Map<String, Object> queryMap = new LinkedHashMap<>();
339+
queryMap.put("name", "alice");
340+
queryMap.put("fooKey", "");
341+
api.queryMap(queryMap);
342+
343+
assertThat(server.takeRequest())
344+
.hasPath("/?name=alice&fooKey");
345+
}
346+
317347
@Test
318348
public void queryMapIterableValuesExpanded() throws Exception {
319349
server.enqueue(new MockResponse());

0 commit comments

Comments
 (0)