WebClient

Changing from Rest Template to Web Client
WebClient
Wasiullah Khan 6 days ago
parent 1e167e936d
commit 839d3601f3

@ -46,14 +46,15 @@ public class TransactionLogService {
} }
@Transactional @Transactional
public void updateResponseFields(Long logId, Map<String, Object> response) { public void updateResponseFields(Long logId, Object responseObj) {
transactionLogRepository.findById(logId).ifPresent(log -> { if (!(responseObj instanceof Map<?, ?> response)) return;
if (response == null) return;
Object argsObj = response.get("arguments"); Object argsObj = response.get("arguments");
if (!(argsObj instanceof List<?> args) || args.isEmpty()) return; 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); log.setTransactionID(transactionId);
}); });
} }

@ -3,13 +3,11 @@ package com.mfsys.aconnect.client.service;
import com.mfsys.aconnect.client.dto.*; import com.mfsys.aconnect.client.dto.*;
import com.mfsys.aconnect.client.exception.*; import com.mfsys.aconnect.client.exception.*;
import com.mfsys.aconnect.client.model.TransactionLog; import com.mfsys.aconnect.client.model.TransactionLog;
import com.mfsys.aconnect.configuration.config.WebClientConfig;
import org.springframework.beans.factory.annotation.Value; 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.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@ -29,10 +27,10 @@ public class TransactionService {
@Value("${app.generalledger.uri}") @Value("${app.generalledger.uri}")
private String generalledgerURI; private String generalledgerURI;
private final RestTemplate restTemplate; private final WebClientConfig webClientService;
private final TransactionLogService transactionLogService; private final TransactionLogService transactionLogService;
public TransactionService(RestTemplate restTemplate, TransactionLogService transactionLogService) { public TransactionService(WebClientConfig webClientService, TransactionLogService transactionLogService) {
this.restTemplate = restTemplate; this.webClientService = webClientService;
this.transactionLogService = transactionLogService; this.transactionLogService = transactionLogService;
} }
@ -49,8 +47,7 @@ public class TransactionService {
headers.set("SUS_USERCODE", userCode); headers.set("SUS_USERCODE", userCode);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<Void> entity = new HttpEntity<>(headers); ResponseEntity<Object> response = webClientService.get(url, headers);
ResponseEntity<Map> response = restTemplate.exchange(url,HttpMethod.GET,entity,Map.class);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
} }
@ -81,15 +78,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", accountGLTransactionRequest.getSgtGntrcreateusr()); headers.set("SUS_USERCODE", accountGLTransactionRequest.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON); headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<AccountGLTransactionRequest> entity = new HttpEntity<>(accountGLTransactionRequest, headers);
TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest, url); TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest, url);
RestTemplate restTemplate = new RestTemplate(); ResponseEntity<Object> response = webClientService.post(
ResponseEntity<Map> response = restTemplate.exchange(
url, url,
HttpMethod.POST, accountGLTransactionRequest,
entity, headers
Map.class
); );
if (response.getBody() != null) { if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -136,15 +130,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", gLtoGLRequest.getSgtGntrcreateusr()); headers.set("SUS_USERCODE", gLtoGLRequest.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON); headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<GLtoGLRequest> entity = new HttpEntity<>(gLtoGLRequest, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest, url); TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest, url);
ResponseEntity<Map> response = restTemplate.exchange( ResponseEntity<Object> response = webClientService.post(
url, url,
HttpMethod.POST, gLtoGLRequest,
entity, headers
Map.class
); );
if (response.getBody() != null) { if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -189,15 +180,12 @@ public class TransactionService {
headers.set("SUS_USERCODE", accountToAccountDTO.getSgtGntrcreateusr()); headers.set("SUS_USERCODE", accountToAccountDTO.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON); headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<AccountToAccountDTO> entity = new HttpEntity<>(accountToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO, url); TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange( ResponseEntity<Object> response = webClientService.post(
url, url,
HttpMethod.POST, accountToAccountDTO,
entity, headers
Map.class
); );
if (response.getBody() != null) { if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); transactionLogService.updateResponseFields(log.getLogId(), response.getBody());
@ -229,16 +217,13 @@ public class TransactionService {
headers.set("SUS_USERCODE", glToAccountDTO.getSgtGntrcreateusr()); headers.set("SUS_USERCODE", glToAccountDTO.getSgtGntrcreateusr());
headers.setContentType(MediaType.APPLICATION_JSON); headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON));
HttpEntity<GlToAccountDTO> entity = new HttpEntity<>(glToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO, url); TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange( ResponseEntity<Object> response = webClientService.post(
url, url,
HttpMethod.POST, glToAccountDTO,
entity, headers
Map.class
); );
if (response.getBody() != null) { if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); transactionLogService.updateResponseFields(log.getLogId(), response.getBody());

@ -1,23 +1,91 @@
package com.mfsys.aconnect.configuration.config; 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.HttpHeaders;
import org.springframework.http.MediaType; 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.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException;
@Service
@Configuration
public class WebClientConfig { public class WebClientConfig {
private final String baseUrl = "http://localhost:8080/digitalkisaan"; private final WebClient webClient = WebClient.builder().build();
public ResponseEntity<Object> 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<Object> 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<Object> 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);
}
}
@Bean public ResponseEntity<Object> delete(String url, HttpHeaders headers) {
public WebClient webClient(WebClient.Builder builder) { try {
return builder return webClient
.baseUrl(baseUrl) // Set the base URL for all requests .delete()
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // Set a default content type .uri(url)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) // Set a default accept header .headers(h -> h.addAll(headers))
.build(); .accept(MediaType.APPLICATION_JSON)
.retrieve()
.toEntity(Object.class)
.block();
} catch (WebClientResponseException ex) {
return buildErrorResponse(ex);
}
}
private ResponseEntity<Object> 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);
} }
} }

Loading…
Cancel
Save