diff --git a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/aop/ApiClientMethodInterceptor.java b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/aop/ApiClientMethodInterceptor.java index 4540a00..7b94952 100644 --- a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/aop/ApiClientMethodInterceptor.java +++ b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/aop/ApiClientMethodInterceptor.java @@ -48,7 +48,14 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.net.URI; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.concurrent.TimeUnit; @Slf4j @@ -295,6 +302,8 @@ private URI getUri(UriBuilder builder, String methodName, Object[] arguments) { } }); + metadata.getProperties().getParams().forEach(builder::queryParam); + Map uriVariables = new HashMap<>(); metadata.getPathVariablePositions().get(methodName).forEach((paramName, position) -> { uriVariables.put(paramName, arguments[position]); diff --git a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/ApiClientProperties.java b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/ApiClientProperties.java index bed34e5..ef09b20 100644 --- a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/ApiClientProperties.java +++ b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/ApiClientProperties.java @@ -68,6 +68,8 @@ public static class ApiClientConfigProperties { private Map headers = new HashMap<>(); + private Map params = new HashMap<>(); + private List> interceptors = new ArrayList<>(); private List> webClientCustomizers = new ArrayList<>(); diff --git a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/PropertiesHelper.java b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/PropertiesHelper.java index eef0551..e9b3d02 100644 --- a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/PropertiesHelper.java +++ b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/properties/PropertiesHelper.java @@ -28,6 +28,8 @@ public static void copyConfigProperties(ApiClientProperties.ApiClientConfigPrope target.setWriteTimeout(source.getWriteTimeout()); } + source.getParams().forEach((key, value) -> target.getParams().put(key, value)); + source.getHeaders().forEach((key, value) -> target.getHeaders().put(key, value)); source.getInterceptors().forEach(aClass -> target.getInterceptors().add(aClass)); diff --git a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/SleuthApiClientTest.java b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/SleuthApiClientTest.java index 34d3242..b458919 100644 --- a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/SleuthApiClientTest.java +++ b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/SleuthApiClientTest.java @@ -50,4 +50,22 @@ void testList() { .jsonPath("$.value[1]").isEqualTo("Kurniawan") .jsonPath("$.value[2]").isEqualTo("Khannedy"); } + + @Test + void testParam() { + webTestClient.get() + .uri(uriBuilder -> uriBuilder.path("/test-param").build()) + .exchange() + .expectStatus() + .is2xxSuccessful() + .expectBody() + .jsonPath("$.value.clientId[0]") + .isEqualTo("clientId") + .jsonPath("$.value.storeId[0]") + .isEqualTo("storeId") + .jsonPath("$.value.channelId[0]") + .isEqualTo("channelId") + .jsonPath("$.value.username[0]") + .isEqualTo("username"); + } } diff --git a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/client/SleuthApiClient.java b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/client/SleuthApiClient.java index 5365a48..567a268 100644 --- a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/client/SleuthApiClient.java +++ b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/client/SleuthApiClient.java @@ -29,4 +29,11 @@ public interface SleuthApiClient { ) Mono>> names(@RequestParam("names") List names); + @RequestMapping( + method = RequestMethod.GET, + value = "/param", + produces = MediaType.APPLICATION_JSON_VALUE + ) + Mono> param(); + } diff --git a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java index b236b9c..19c3a04 100644 --- a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java +++ b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java @@ -68,4 +68,20 @@ public Mono>> names(@RequestParam("names") List> param(ServerWebExchange exchange) { + return Mono.just(new GenericResponse<>(exchange.getRequest().getQueryParams())); + } + + @GetMapping( + value = "/test-param", + produces = MediaType.APPLICATION_JSON_VALUE + ) + public Mono> testParam() { + return sleuthApiClient.param(); + } + } diff --git a/blibli-backend-framework-api-client/src/test/resources/application.properties b/blibli-backend-framework-api-client/src/test/resources/application.properties index a9f4cb8..58100f6 100644 --- a/blibli-backend-framework-api-client/src/test/resources/application.properties +++ b/blibli-backend-framework-api-client/src/test/resources/application.properties @@ -2,6 +2,10 @@ blibli.backend.apiclient.packages=com.blibli.oss.backend.apiclient.client blibli.backend.apiclient.configs.exampleClient.url=http://localhost:8089 blibli.backend.apiclient.configs.sleuthApiClient.url=http://localhost:15234 +blibli.backend.apiclient.configs.sleuthApiClient.params.storeId=storeId +blibli.backend.apiclient.configs.sleuthApiClient.params.channelId=channelId +blibli.backend.apiclient.configs.sleuthApiClient.params.clientId=clientId +blibli.backend.apiclient.configs.sleuthApiClient.params.username=username blibli.backend.apiclient.configs.helloApiClient.url=http://localhost:8089 blibli.backend.apiclient.configs.helloApiClient.fallback=com.blibli.oss.backend.apiclient.client.HelloApiClientFallback