From 839d3601f3a0a7c556d3c290280c09decb6739ba Mon Sep 17 00:00:00 2001 From: Wasiullah Khan Jadoon Date: Thu, 29 Jan 2026 11:40:56 +0500 Subject: [PATCH] WebClient Changing from Rest Template to Web Client --- .../client/service/TransactionLogService.java | 13 +-- .../client/service/TransactionService.java | 49 ++++------ .../configuration/config/WebClientConfig.java | 94 ++++++++++++++++--- 3 files changed, 105 insertions(+), 51 deletions(-) diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java index 43d9b84..936c66d 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java @@ -46,14 +46,15 @@ public class TransactionLogService { } @Transactional - public void updateResponseFields(Long logId, Map response) { - transactionLogRepository.findById(logId).ifPresent(log -> { - if (response == null) return; - Object argsObj = response.get("arguments"); - if (!(argsObj instanceof List args) || args.isEmpty()) return; + public void updateResponseFields(Long logId, Object responseObj) { + if (!(responseObj instanceof Map response)) return; + + Object argsObj = response.get("arguments"); + if (!(argsObj instanceof List args) || args.isEmpty()) return; - String transactionId = args.get(0).toString(); + String transactionId = args.get(0).toString(); + transactionLogRepository.findById(logId).ifPresent(log -> { log.setTransactionID(transactionId); }); } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java index 2ce12f5..2c80df6 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java @@ -3,13 +3,11 @@ package com.mfsys.aconnect.client.service; import com.mfsys.aconnect.client.dto.*; import com.mfsys.aconnect.client.exception.*; import com.mfsys.aconnect.client.model.TransactionLog; +import com.mfsys.aconnect.configuration.config.WebClientConfig; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; import org.springframework.http.HttpHeaders; @@ -29,10 +27,10 @@ public class TransactionService { @Value("${app.generalledger.uri}") private String generalledgerURI; - private final RestTemplate restTemplate; + private final WebClientConfig webClientService; private final TransactionLogService transactionLogService; - public TransactionService(RestTemplate restTemplate, TransactionLogService transactionLogService) { - this.restTemplate = restTemplate; + public TransactionService(WebClientConfig webClientService, TransactionLogService transactionLogService) { + this.webClientService = webClientService; this.transactionLogService = transactionLogService; } @@ -49,8 +47,7 @@ public class TransactionService { headers.set("SUS_USERCODE", userCode); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); - HttpEntity entity = new HttpEntity<>(headers); - ResponseEntity response = restTemplate.exchange(url,HttpMethod.GET,entity,Map.class); + ResponseEntity response = webClientService.get(url, headers); return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); } @@ -81,15 +78,12 @@ public class TransactionService { headers.set("SUS_USERCODE", accountGLTransactionRequest.getSgtGntrcreateusr()); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); - HttpEntity entity = new HttpEntity<>(accountGLTransactionRequest, headers); TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest, url); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.exchange( + ResponseEntity response = webClientService.post( url, - HttpMethod.POST, - entity, - Map.class + accountGLTransactionRequest, + headers ); if (response.getBody() != null) { transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); @@ -136,15 +130,12 @@ public class TransactionService { headers.set("SUS_USERCODE", gLtoGLRequest.getSgtGntrcreateusr()); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); - HttpEntity entity = new HttpEntity<>(gLtoGLRequest, headers); - RestTemplate restTemplate = new RestTemplate(); TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest, url); - ResponseEntity response = restTemplate.exchange( + ResponseEntity response = webClientService.post( url, - HttpMethod.POST, - entity, - Map.class + gLtoGLRequest, + headers ); if (response.getBody() != null) { transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); @@ -189,15 +180,12 @@ public class TransactionService { headers.set("SUS_USERCODE", accountToAccountDTO.getSgtGntrcreateusr()); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); - HttpEntity entity = new HttpEntity<>(accountToAccountDTO, headers); - RestTemplate restTemplate = new RestTemplate(); TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO, url); - ResponseEntity response = restTemplate.exchange( + ResponseEntity response = webClientService.post( url, - HttpMethod.POST, - entity, - Map.class + accountToAccountDTO, + headers ); if (response.getBody() != null) { transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); @@ -229,16 +217,13 @@ public class TransactionService { headers.set("SUS_USERCODE", glToAccountDTO.getSgtGntrcreateusr()); headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); - HttpEntity entity = new HttpEntity<>(glToAccountDTO, headers); - RestTemplate restTemplate = new RestTemplate(); TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO, url); - ResponseEntity response = restTemplate.exchange( + ResponseEntity response = webClientService.post( url, - HttpMethod.POST, - entity, - Map.class + glToAccountDTO, + headers ); if (response.getBody() != null) { transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); 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 fe15892..10f9a9b 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,23 +1,91 @@ package com.mfsys.aconnect.configuration.config; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClientResponseException; - -@Configuration +@Service public class WebClientConfig { - private final String baseUrl = "http://localhost:8080/digitalkisaan"; + private final WebClient webClient = WebClient.builder().build(); + + public ResponseEntity post(String url, Object body, HttpHeaders headers) { + try { + return webClient + .post() + .uri(url) + .headers(h -> h.addAll(headers)) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .bodyValue(body) + .retrieve() + .toEntity(Object.class) + .block(); + } catch (WebClientResponseException ex){ + return buildErrorResponse(ex); + } + } + + public ResponseEntity get(String url, HttpHeaders headers) { + try { + return webClient + .get() + .uri(url) + .headers(h -> h.addAll(headers)) + .accept(MediaType.APPLICATION_JSON) + .retrieve() + .toEntity(Object.class) + .block(); + } catch (WebClientResponseException ex){ + return buildErrorResponse(ex); + } + } + + public ResponseEntity put(String url, Object body, HttpHeaders headers) { + try { + return webClient + .put() + .uri(url) + .headers(h -> h.addAll(headers)) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .bodyValue(body) + .retrieve() + .toEntity(Object.class) + .block(); + } catch (WebClientResponseException ex){ + return buildErrorResponse(ex); + } + } + + public ResponseEntity delete(String url, HttpHeaders headers) { + try { + return webClient + .delete() + .uri(url) + .headers(h -> h.addAll(headers)) + .accept(MediaType.APPLICATION_JSON) + .retrieve() + .toEntity(Object.class) + .block(); + } catch (WebClientResponseException ex) { + return buildErrorResponse(ex); + } + } - @Bean - public WebClient webClient(WebClient.Builder builder) { - return builder - .baseUrl(baseUrl) // Set the base URL for all requests - .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // Set a default content type - .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) // Set a default accept header - .build(); - } + private ResponseEntity buildErrorResponse(WebClientResponseException ex){ + Object errorBody; + try{ + errorBody = ex.getResponseBodyAs(Object.class); + }catch (Exception e) { + errorBody = ex.getResponseBodyAsString(); + } + return ResponseEntity + .status(ex.getStatusCode()) + .contentType(MediaType.APPLICATION_JSON) + .body(errorBody); + } }