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
public void updateResponseFields(Long logId, Map<String, Object> 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);
});
}

@ -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<Void> entity = new HttpEntity<>(headers);
ResponseEntity<Map> response = restTemplate.exchange(url,HttpMethod.GET,entity,Map.class);
ResponseEntity<Object> 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<AccountGLTransactionRequest> entity = new HttpEntity<>(accountGLTransactionRequest, headers);
TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest, url);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> 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<GLtoGLRequest> entity = new HttpEntity<>(gLtoGLRequest, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> 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<AccountToAccountDTO> entity = new HttpEntity<>(accountToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> 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<GlToAccountDTO> entity = new HttpEntity<>(glToAccountDTO, headers);
RestTemplate restTemplate = new RestTemplate();
TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO, url);
ResponseEntity<Map> response = restTemplate.exchange(
ResponseEntity<Object> response = webClientService.post(
url,
HttpMethod.POST,
entity,
Map.class
glToAccountDTO,
headers
);
if (response.getBody() != null) {
transactionLogService.updateResponseFields(log.getLogId(), response.getBody());

@ -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<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);
}
}
public ResponseEntity<Object> 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<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