From 8b263583bb2befdae79793d8d50957dd962d24fd Mon Sep 17 00:00:00 2001 From: Sashir Estela Date: Sat, 31 Aug 2024 02:26:41 +0000 Subject: [PATCH 1/2] Support for Enum Query parameters --- pom.xml | 28 ++++++------- .../cleverclient/http/URLBuilder.java | 27 ++++++++++++- .../cleverclient/http/URLBuilderTest.java | 39 +++++++++++++++++++ 3 files changed, 79 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index a80d320..94a30df 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.sashirestela cleverclient - 1.4.3 + 1.4.4 jar cleverclient @@ -51,23 +51,23 @@ UTF-8 11 - 2.0.12 - 1.18.32 - 2.17.0 - 5.10.2 - 5.11.0 + 2.0.16 + 1.18.34 + 2.17.2 + 5.11.0 + 5.13.0 3.13.0 - 3.4.1 - 3.2.5 - 3.2.0 + 3.5.0 + 3.5.0 + 3.4.1 0.8.12 - 3.5.0 - 2.16.2 + 3.6.0 + 2.17.1 3.3.1 - 3.6.3 - 3.1.0 - 1.6.13 + 3.10.0 + 3.2.5 + 1.7.0 2.43.0 diff --git a/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java b/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java index 47dda4f..32163d9 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java +++ b/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java @@ -2,13 +2,18 @@ import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.MethodMetadata; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.ParameterMetadata; +import io.github.sashirestela.cleverclient.support.CleverClientException; +import io.github.sashirestela.cleverclient.util.CommonUtil; import io.github.sashirestela.cleverclient.util.JsonUtil; +import java.lang.reflect.Field; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonProperty; + public class URLBuilder { private static URLBuilder urlBuilder = null; @@ -52,8 +57,11 @@ private String includeQueryParams(String url, List queryParam if (value == null) { continue; } + if (value instanceof Enum) { + value = getEnumValue(value); + } var queryParam = parameter.getAnnotation().getValue(); - if (queryParam == null || queryParam.isEmpty()) + if (CommonUtil.isNullOrEmpty(queryParam)) appendQueryParams(JsonUtil.objectToMap(value), queryParamBuilder); else appendQueryParam(queryParam, value, queryParamBuilder); @@ -61,6 +69,23 @@ private String includeQueryParams(String url, List queryParam return url + queryParamBuilder; } + private String getEnumValue(Object value) { + var clazz = value.getClass(); + var enumValue = ((Enum) value).name(); + Field enumField; + try { + enumField = clazz.getField(enumValue); + var hasJsonPropertyAnnotation = enumField.isAnnotationPresent(JsonProperty.class); + if (hasJsonPropertyAnnotation) { + return enumField.getAnnotation(JsonProperty.class).value(); + } else { + return enumValue; + } + } catch (NoSuchFieldException | SecurityException e) { + throw new CleverClientException("Cannot get the enum field for the enum value {0}", enumValue, e); + } + } + private void appendQueryParams(Map queryParams, StringBuilder queryParamBuilder) { queryParams.forEach((k, v) -> appendQueryParam(k, v, queryParamBuilder)); } diff --git a/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java b/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java index 7efab61..2c373a8 100644 --- a/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java +++ b/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java @@ -7,6 +7,8 @@ import lombok.Data; import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.List; import java.util.Map; @@ -126,6 +128,35 @@ void shouldReturnReplacedUrlWithQueryParamsWhenMethodContainsQueryParamsForPojos assertEquals(expectedUrl, actualUrl); } + @Test + void shouldReturnReplacedUrlWithQueryParamsWhenMethodContainsEnumQueryParams() { + var url = "/api/domain/entities"; + var paramsList = List.of( + ParameterMetadata.builder() + .index(0) + .annotation(AnnotationMetadata.builder() + .name("Query") + .isHttpMethod(false) + .valueByField(Map.of("value", "statusOpen")) + .build()) + .build(), + ParameterMetadata.builder() + .index(1) + .annotation(AnnotationMetadata.builder() + .name("Query") + .isHttpMethod(false) + .valueByField(Map.of("value", "statusClosed")) + .build()) + .build()); + + when(methodMetadata.getPathParameters()).thenReturn(List.of()); + when(methodMetadata.getQueryParameters()).thenReturn(paramsList); + + var actualUrl = urlBuilder.build(url, methodMetadata, new Object[] { Status.OPEN, Status.CLOSED }); + var expectedUrl = "/api/domain/entities?statusOpen=open&statusClosed=CLOSED"; + assertEquals(expectedUrl, actualUrl); + } + @Data @AllArgsConstructor static class Pagination { @@ -135,4 +166,12 @@ static class Pagination { } + enum Status { + + @JsonProperty("open") + OPEN, + + CLOSED; + } + } From 2a9ea05420df071baa5272ea02f96000e2e585ba Mon Sep 17 00:00:00 2001 From: Sashir Estela Date: Sat, 31 Aug 2024 02:33:35 +0000 Subject: [PATCH 2/2] Fix formatting issue --- .../io/github/sashirestela/cleverclient/http/URLBuilder.java | 3 +-- .../github/sashirestela/cleverclient/http/URLBuilderTest.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java b/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java index 32163d9..225f360 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java +++ b/src/main/java/io/github/sashirestela/cleverclient/http/URLBuilder.java @@ -1,5 +1,6 @@ package io.github.sashirestela.cleverclient.http; +import com.fasterxml.jackson.annotation.JsonProperty; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.MethodMetadata; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.ParameterMetadata; import io.github.sashirestela.cleverclient.support.CleverClientException; @@ -12,8 +13,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.annotation.JsonProperty; - public class URLBuilder { private static URLBuilder urlBuilder = null; diff --git a/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java b/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java index 2c373a8..9417074 100644 --- a/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java +++ b/src/test/java/io/github/sashirestela/cleverclient/http/URLBuilderTest.java @@ -1,5 +1,6 @@ package io.github.sashirestela.cleverclient.http; +import com.fasterxml.jackson.annotation.JsonProperty; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.AnnotationMetadata; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.MethodMetadata; import io.github.sashirestela.cleverclient.metadata.InterfaceMetadata.ParameterMetadata; @@ -7,8 +8,6 @@ import lombok.Data; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.List; import java.util.Map;