From 177eb2eb5c01f6305f0687779bb68110f99161e5 Mon Sep 17 00:00:00 2001 From: Vincent Guillet Date: Tue, 2 Dec 2025 16:54:49 +0100 Subject: [PATCH] Refactor URI building in PrestashopClient to simplify query parameter encoding --- .../api/service/PrestashopClient.java | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java b/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java index aa96756..ff5ea9a 100644 --- a/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java +++ b/api/src/main/java/fr/gameovergne/api/service/PrestashopClient.java @@ -43,48 +43,36 @@ public class PrestashopClient { */ private String buildUri(String path, MultiValueMap params) { StringBuilder sb = new StringBuilder(); - - // baseUrl (ex: https://shop.gameovergne.fr/api) sb.append(baseUrl); - // path (on gère proprement le /) if (path != null && !path.isEmpty()) { - if (path.charAt(0) == '/') { - sb.append(path); - } else { - sb.append('/').append(path); - } + if (path.charAt(0) == '/') sb.append(path); + else sb.append('/').append(path); } - // query params if (params != null && !params.isEmpty()) { boolean first = true; - for (Map.Entry> entry : params.entrySet()) { String key = entry.getKey(); List values = entry.getValue(); - - if (values == null || values.isEmpty()) { - continue; - } - - String encodedKey = URLEncoder.encode(key, StandardCharsets.UTF_8); + if (values == null || values.isEmpty()) continue; for (String rawValue : values) { - if (first) { - sb.append('?'); - first = false; - } else { - sb.append('&'); - } + if (first) { sb.append('?'); first = false; } + else sb.append('&'); - String encodedValue = rawValue == null - ? "" - : URLEncoder.encode(rawValue, StandardCharsets.UTF_8); + // encode la clé + sb.append(URLEncoder.encode(key, StandardCharsets.UTF_8)); + sb.append('='); - sb.append(encodedKey) - .append('=') - .append(encodedValue); + // on encode seulement les parties sensibles, PAS les crochets ni virgules + String safeValue = rawValue + .replace("[", "%5B") + .replace("]", "%5D") + .replace(" ", "") + .replace(",", ","); // laisse la virgule brute + + sb.append(safeValue); } } }