From 44827ff19487145e5607582f89b5537d07a068c5 Mon Sep 17 00:00:00 2001 From: Wasiullah Khan Jadoon Date: Fri, 30 Jan 2026 17:34:36 +0500 Subject: [PATCH] Updated UploadDocumentService from Rest Template to Web Client --- .../client/service/UploadDocumentService.java | 25 ++++++--------- .../configuration/config/WebClientConfig.java | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/UploadDocumentService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/UploadDocumentService.java index 791072b..7c1cb3f 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/UploadDocumentService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/UploadDocumentService.java @@ -1,11 +1,11 @@ package com.mfsys.aconnect.client.service; +import com.mfsys.aconnect.configuration.config.WebClientConfig; import org.springframework.util.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.*; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import java.util.*; @@ -19,10 +19,9 @@ public class UploadDocumentService { @Value("${app.crm.uri}") private String crmURI; - private final RestTemplate restTemplate; - - public UploadDocumentService(RestTemplate restTemplate){ - this.restTemplate = restTemplate; + private final WebClientConfig webClientConfig; + public UploadDocumentService(WebClientConfig webClientConfig){ + this.webClientConfig = webClientConfig; } public ResponseEntity> depositCacheFiles( @@ -44,12 +43,10 @@ public class UploadDocumentService { body.add("file", file.getResource()); } - HttpEntity> requestEntity = new HttpEntity<>(body, headers); - - return restTemplate.exchange( + return webClientConfig.postMultipart( url, - HttpMethod.POST, - requestEntity, + body, + headers, new ParameterizedTypeReference>() {} ); } @@ -73,12 +70,10 @@ public class UploadDocumentService { body.add("file", file.getResource()); } - HttpEntity> requestEntity = new HttpEntity<>(body, headers); - - return restTemplate.exchange( + return webClientConfig.postMultipart( url, - HttpMethod.POST, - requestEntity, + body, + headers, new ParameterizedTypeReference>() {} ); } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/configuration/config/WebClientConfig.java b/aconnect/src/main/java/com/mfsys/aconnect/configuration/config/WebClientConfig.java index 10f9a9b..d7ea9bc 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/configuration/config/WebClientConfig.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/configuration/config/WebClientConfig.java @@ -1,9 +1,12 @@ package com.mfsys.aconnect.configuration.config; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; @@ -29,6 +32,22 @@ public class WebClientConfig { } } + public ResponseEntity postMultipart(String url, MultiValueMap body, HttpHeaders headers, ParameterizedTypeReference responseType) { + try { + return webClient + .post() + .uri(url) + .headers(h -> h.addAll(headers)) + .contentType(MediaType.MULTIPART_FORM_DATA) + .body(BodyInserters.fromMultipartData(body)) + .retrieve() + .toEntity(responseType) + .block(); + } catch (WebClientResponseException ex) { + return buildErrorResponseTyped(ex); + } + } + public ResponseEntity get(String url, HttpHeaders headers) { try { return webClient @@ -88,4 +107,17 @@ public class WebClientConfig { .contentType(MediaType.APPLICATION_JSON) .body(errorBody); } + + private ResponseEntity buildErrorResponseTyped(WebClientResponseException ex) { + T errorBody; + try { + errorBody = (T) ex.getResponseBodyAs(Object.class); + } catch (Exception e) { + errorBody = (T) ex.getResponseBodyAsString(); + } + return ResponseEntity + .status(ex.getStatusCode()) + .contentType(MediaType.APPLICATION_JSON) + .body(errorBody); + } }