Enhance PrestashopClient and PrestashopProxyController with new proxy method and improved response handling
This commit is contained in:
@@ -32,6 +32,7 @@ public class PrestashopProxyController {
|
|||||||
String relativePath = new AntPathMatcher()
|
String relativePath = new AntPathMatcher()
|
||||||
.extractPathWithinPattern(bestMatchPattern, fullPath);
|
.extractPathWithinPattern(bestMatchPattern, fullPath);
|
||||||
|
|
||||||
|
// Path Presta : "/categories" ou "/manufacturers/3" etc.
|
||||||
String path = relativePath.isEmpty() ? "/" : "/" + relativePath;
|
String path = relativePath.isEmpty() ? "/" : "/" + relativePath;
|
||||||
|
|
||||||
// Query string brute, déjà encodée (display=%5Bid,name,active%5D&output_format=JSON)
|
// Query string brute, déjà encodée (display=%5Bid,name,active%5D&output_format=JSON)
|
||||||
@@ -39,10 +40,15 @@ public class PrestashopProxyController {
|
|||||||
|
|
||||||
var prestaResponse = prestashopClient.getWithRawQuery(path, rawQuery);
|
var prestaResponse = prestashopClient.getWithRawQuery(path, rawQuery);
|
||||||
|
|
||||||
// On renvoie EXACTEMENT le même status + body, en forçant JSON
|
// On propage le status + body, et on garde le Content-Type renvoyé par Presta
|
||||||
|
MediaType contentType = prestaResponse.getHeaders().getContentType();
|
||||||
|
if (contentType == null) {
|
||||||
|
contentType = MediaType.APPLICATION_JSON;
|
||||||
|
}
|
||||||
|
|
||||||
return ResponseEntity
|
return ResponseEntity
|
||||||
.status(prestaResponse.getStatusCode())
|
.status(prestaResponse.getStatusCode())
|
||||||
.contentType(MediaType.APPLICATION_JSON)
|
.contentType(contentType)
|
||||||
.body(prestaResponse.getBody());
|
.body(prestaResponse.getBody());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// File: src/main/java/fr/gameovergne/api/service/PrestashopClient.java
|
||||||
package fr.gameovergne.api.service;
|
package fr.gameovergne.api.service;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -44,6 +45,8 @@ public class PrestashopClient {
|
|||||||
return builder.build(true).toUriString();
|
return builder.build(true).toUriString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------- Méthodes "typed" JSON / XML utilisées par ps-admin --------
|
||||||
|
|
||||||
public String getJson(String path, MultiValueMap<String, String> params) {
|
public String getJson(String path, MultiValueMap<String, String> params) {
|
||||||
String uri = buildUri(path, params);
|
String uri = buildUri(path, params);
|
||||||
log.info("[PrestaShop] GET JSON {}", uri);
|
log.info("[PrestaShop] GET JSON {}", uri);
|
||||||
@@ -94,4 +97,25 @@ public class PrestashopClient {
|
|||||||
.retrieve()
|
.retrieve()
|
||||||
.toBodilessEntity();
|
.toBodilessEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------- Méthode générique utilisée par le proxy /api/ps/** --------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy brut : on lui donne le path Presta (ex: "/categories") et la query string déjà encodée.
|
||||||
|
* On récupère un ResponseEntity<String> pour pouvoir propager le status code.
|
||||||
|
*/
|
||||||
|
public ResponseEntity<String> getWithRawQuery(String path, String rawQuery) {
|
||||||
|
String uri = baseUrl + path;
|
||||||
|
if (rawQuery != null && !rawQuery.isBlank()) {
|
||||||
|
uri = uri + "?" + rawQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("[PrestaShop] GET (proxy) {}", uri);
|
||||||
|
|
||||||
|
return client.get()
|
||||||
|
.uri(uri)
|
||||||
|
.accept(MediaType.APPLICATION_JSON)
|
||||||
|
.retrieve()
|
||||||
|
.toEntity(String.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user