1515 * Permet d'effectuer des requêtes GET et POST.
1616 */
1717
18- public class ApiClient {
18+ public class ApiClient extends ApiFactory {
1919
2020 /**
2121 * WebClient est utilisé pour effectuer les requêtes HTTP vers l'API.
@@ -24,11 +24,10 @@ public class ApiClient {
2424 */
2525 private final WebClient webClient ;
2626
27- private final AtomicReference <ApiResponse > lastResponse = new AtomicReference <>();
28-
29- // private final AtomicReference<Map<String, Object>> lastRawResponse = new AtomicReference<>();
27+ private final AtomicReference <ApiFactory > lastResponse = new AtomicReference <>();
3028
3129 private final Logger logger = new Logger ();
30+ private final ApiFactory response = new ApiFactory ();
3231
3332 /**
3433 * Constructeur de ApiClient qui initialise WebClient avec l'URL de base.
@@ -51,18 +50,22 @@ public ApiClient() {
5150 * @param routeName c'est le nom de la route à appeler.
5251 * @return la réponse de l'API encapsulée.
5352 */
54- public Mono <ApiResponse > callAPIGet (String routeName ) {
53+ public Mono <ApiFactory > callAPIGet (String routeName ) {
5554 logger .INFO ("Appel GET vers: " + routeName );
5655 return webClient .get ()
57- .uri (routeName )
58- .retrieve ()
59- .bodyToMono (new ParameterizedTypeReference <ApiResponse >() {
60- })
61- .subscribeOn (Schedulers .boundedElastic ())
62- .doOnNext (lastResponse ::set )
63- .doOnError (error -> logger .ERROR ("Erreur lors de l'appel GET: " + error .getMessage ()));
56+ .uri (routeName )
57+ .retrieve ()
58+ .bodyToMono (String .class ) // Récupère le JSON brut comme String
59+ .subscribeOn (Schedulers .boundedElastic ())
60+ .map (rawJson -> {
61+ response .parseFromRawJson (rawJson );
62+ return response ;
63+ })
64+ .doOnNext (lastResponse ::set )
65+ .doOnError (error -> logger .CRITICAL ("Erreur lors de l'appel GET: " + error .getMessage ()));
6466 }
6567
68+
6669 /**
6770 * Méthode pour appeler l'API avec une requête POST.
6871 *
@@ -71,17 +74,20 @@ public Mono<ApiResponse> callAPIGet(String routeName) {
7174 * corps).
7275 * @return la réponse de l'API encapsulée.
7376 */
74- public Mono <ApiResponse > callAPIPost (String routeName , Map <String , Object > body ) {
77+ public Mono <ApiFactory > callAPIPost (String routeName , Map <String , Object > body ) {
7578 logger .INFO ("Appel POST vers: " + routeName );
7679 return webClient .post ()
7780 .uri (routeName )
7881 .bodyValue (body != null ? body : Map .of ())
7982 .retrieve ()
80- .bodyToMono (new ParameterizedTypeReference <ApiResponse >() {
81- })
83+ .bodyToMono (String .class )
8284 .subscribeOn (Schedulers .boundedElastic ())
83- .doOnNext (lastResponse ::set )
84- .doOnError (error -> logger .ERROR ("Erreur lors de l'appel POST: " + error .getMessage ()));
85+ .map (rawJson -> {
86+ response .parseFromRawJson (rawJson );
87+ return response ;
88+ })
89+ .doOnNext (lastResponse ::set )
90+ .doOnError (error -> logger .CRITICAL ("Erreur lors de l'appel POST: " + error .getMessage ()));
8591 }
8692
8793 /**
@@ -91,17 +97,20 @@ public Mono<ApiResponse> callAPIPost(String routeName, Map<String, Object> body)
9197 * @param body Corps de la requête (peut être null pour une requête sans corps).
9298 * @return la réponse de l'API encapsulée.
9399 */
94- public Mono <ApiResponse > callAPIPut (String routeName , Map <String , Object > body ) {
100+ public Mono <ApiFactory > callAPIPut (String routeName , Map <String , Object > body ) {
95101 logger .INFO ("Appel PUT vers: " + routeName );
96102 return webClient .put ()
97103 .uri (routeName )
98104 .bodyValue (body != null ? body : Map .of ())
99105 .retrieve ()
100- .bodyToMono (new ParameterizedTypeReference <ApiResponse >() {
101- })
102- .subscribeOn (Schedulers .boundedElastic ())
103- .doOnNext (lastResponse ::set )
104- .doOnError (error -> logger .ERROR ("Erreur lors de l'appel PUT: " + error .getMessage ()));
106+ .bodyToMono (String .class )
107+ .subscribeOn (Schedulers .boundedElastic ())
108+ .map (rawJson -> {
109+ response .parseFromRawJson (rawJson );
110+ return response ;
111+ })
112+ .doOnNext (lastResponse ::set )
113+ .doOnError (error -> logger .CRITICAL ("Erreur lors de l'appel PUT: " + error .getMessage ()));
105114 }
106115
107116 /**
@@ -111,17 +120,20 @@ public Mono<ApiResponse> callAPIPut(String routeName, Map<String, Object> body)
111120 * @param body Corps de la requête (peut être null pour une requête sans corps).
112121 * @return la réponse de l'API encapsulée.
113122 */
114- public Mono <ApiResponse > callAPIPatch (String routeName , Map <String , Object > body ) {
123+ public Mono <ApiFactory > callAPIPatch (String routeName , Map <String , Object > body ) {
115124 logger .INFO ("Appel PATCH vers: " + routeName );
116125 return webClient .patch ()
117126 .uri (routeName )
118127 .bodyValue (body != null ? body : Map .of ())
119128 .retrieve ()
120- .bodyToMono (new ParameterizedTypeReference <ApiResponse >() {
121- })
122- .subscribeOn (Schedulers .boundedElastic ())
123- .doOnNext (lastResponse ::set )
124- .doOnError (error -> logger .ERROR ("Erreur lors de l'appel PATCH: " + error .getMessage ()));
129+ .bodyToMono (String .class )
130+ .subscribeOn (Schedulers .boundedElastic ())
131+ .map (rawJson -> {
132+ response .parseFromRawJson (rawJson );
133+ return response ;
134+ })
135+ .doOnNext (lastResponse ::set )
136+ .doOnError (error -> logger .CRITICAL ("Erreur lors de l'appel PATCH: " + error .getMessage ()));
125137 }
126138
127139 /**
@@ -130,15 +142,18 @@ public Mono<ApiResponse> callAPIPatch(String routeName, Map<String, Object> body
130142 * @param routeName Nom de la route à appeler.
131143 * @return la réponse de l'API encapsulée.
132144 */
133- public Mono <ApiResponse > callAPIDelete (String routeName ) {
145+ public Mono <ApiFactory > callAPIDelete (String routeName ) {
134146 logger .INFO ("Appel DELETE vers: " + routeName );
135147 return webClient .delete ()
136148 .uri (routeName )
137149 .retrieve ()
138- .bodyToMono (new ParameterizedTypeReference <ApiResponse >() {
139- })
140- .subscribeOn (Schedulers .boundedElastic ())
141- .doOnNext (lastResponse ::set )
142- .doOnError (error -> logger .ERROR ("Erreur lors de l'appel PATCH: " + error .getMessage ()));
150+ .bodyToMono (String .class )
151+ .subscribeOn (Schedulers .boundedElastic ())
152+ .map (rawJson -> {
153+ response .parseFromRawJson (rawJson );
154+ return response ;
155+ })
156+ .doOnNext (lastResponse ::set )
157+ .doOnError (error -> logger .CRITICAL ("Erreur lors de l'appel DELETE: " + error .getMessage ()));
143158 }
144159}
0 commit comments