Skip to content

Commit e698832

Browse files
committed
Support RequestParam with Collection (multiple values)
1 parent 81e07ff commit e698832

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/aop/ApiClientMethodInterceptor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,12 @@ private URI getUri(UriBuilder builder, String methodName, Object[] arguments) {
287287
builder.path(metadata.getPaths().get(methodName));
288288

289289
metadata.getQueryParamPositions().get(methodName).forEach((paramName, position) -> {
290-
builder.queryParam(paramName, arguments[position]);
290+
if (arguments[position] instanceof Collection) {
291+
Collection collection = (Collection) arguments[position];
292+
builder.queryParam(paramName, collection);
293+
} else {
294+
builder.queryParam(paramName, arguments[position]);
295+
}
291296
});
292297

293298
Map<String, Object> uriVariables = new HashMap<>();

blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/SleuthApiClientTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,18 @@ void testSleuth() {
3636
.jsonPath("$.firstName").isEqualTo("Eko")
3737
.jsonPath("$.lastName").isEqualTo("Khannedy");
3838
}
39+
40+
@Test
41+
void testList() {
42+
webTestClient.get()
43+
.uri(uriBuilder -> uriBuilder
44+
.path("/list")
45+
.build())
46+
.exchange()
47+
.expectStatus().is2xxSuccessful()
48+
.expectBody()
49+
.jsonPath("$.value[0]").isEqualTo("Eko")
50+
.jsonPath("$.value[1]").isEqualTo("Kurniawan")
51+
.jsonPath("$.value[2]").isEqualTo("Khannedy");
52+
}
3953
}

blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/client/SleuthApiClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.blibli.oss.backend.apiclient.client;
22

33
import com.blibli.oss.backend.apiclient.annotation.ApiClient;
4+
import com.blibli.oss.backend.apiclient.client.model.GenericResponse;
45
import org.springframework.http.MediaType;
56
import org.springframework.web.bind.annotation.RequestMapping;
67
import org.springframework.web.bind.annotation.RequestMethod;
8+
import org.springframework.web.bind.annotation.RequestParam;
79
import reactor.core.publisher.Mono;
810

11+
import java.util.List;
912
import java.util.Map;
1013

1114
@ApiClient(
@@ -20,4 +23,10 @@ public interface SleuthApiClient {
2023
)
2124
Mono<Map<String, String>> second();
2225

26+
@RequestMapping(
27+
value = "/names",
28+
produces = MediaType.APPLICATION_JSON_VALUE
29+
)
30+
Mono<GenericResponse<List<String>>> names(@RequestParam("names") List<String> names);
31+
2332
}

blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import brave.Tracer;
44
import brave.propagation.ExtraFieldPropagation;
55
import com.blibli.oss.backend.apiclient.client.SleuthApiClient;
6+
import com.blibli.oss.backend.apiclient.client.model.GenericResponse;
67
import com.blibli.oss.backend.sleuth.configuration.SleuthConfiguration;
78
import org.springframework.beans.factory.annotation.Autowired;
89
import org.springframework.http.MediaType;
@@ -12,7 +13,9 @@
1213
import org.springframework.web.server.ServerWebExchange;
1314
import reactor.core.publisher.Mono;
1415

16+
import java.util.Arrays;
1517
import java.util.HashMap;
18+
import java.util.List;
1619
import java.util.Map;
1720

1821
@RestController
@@ -48,4 +51,21 @@ public Mono<Map<String, String>> second(ServerWebExchange exchange) {
4851
return Mono.just(map);
4952
}
5053

54+
@GetMapping(
55+
value = "/list",
56+
produces = MediaType.APPLICATION_JSON_VALUE
57+
)
58+
public Mono<GenericResponse<List<String>>> list() {
59+
return sleuthApiClient.names(Arrays.asList("Eko", "Kurniawan", "Khannedy"));
60+
}
61+
62+
@GetMapping(
63+
value = "/names",
64+
produces = MediaType.APPLICATION_JSON_VALUE
65+
)
66+
public Mono<GenericResponse<List<String>>> names(@RequestParam("names") List<String> names) {
67+
GenericResponse<List<String>> response = new GenericResponse<>(names);
68+
return Mono.just(response);
69+
}
70+
5171
}

0 commit comments

Comments
 (0)