package com.billpaymentservice.bbps.serviceImpl; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestClient; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.AllArgsConstructor; @Service @AllArgsConstructor public class HttpService { private static final Logger log = LoggerFactory.getLogger(HttpService.class); private final RestClient restClient; private final ObjectMapper objectMapper = new ObjectMapper(); public HashMap postRequest(String url, String payload, HttpHeaders customHeaders) { HashMap response = new HashMap<>(); try { HttpHeaders headers = new HttpHeaders(); if (customHeaders != null) { customHeaders.forEach((key, value) -> { if (!key.equalsIgnoreCase(HttpHeaders.CONTENT_TYPE)) { headers.addAll(key, value); } }); } headers.setContentType(MediaType.APPLICATION_JSON); // ✅ MAKE THE REQUEST ResponseEntity restResponse = restClient.post() .uri(url) .headers(h -> h.addAll(headers)) .body(payload) .retrieve() .toEntity(String.class); response.put("respCode", String.valueOf(restResponse.getStatusCode().value())); response.put("data", restResponse.getBody()); log.info("✅ HttpService Response Status: {}", restResponse.getStatusCode()); } catch (HttpClientErrorException.Forbidden e) { // ✅ SPECIAL 403 HANDLING log.error("🚫 HttpService: 403 FORBIDDEN"); response.put("respCode", "403"); response.put("data", "FORBIDDEN - Check credentials in HttpService"); } catch (Exception e) { log.error("❌ HttpService Exception: {}", e.getMessage()); response.put("respCode", "500"); response.put("data", "HttpService Error: " + e.getMessage()); } return response; } public HashMap getRequest(String url, HttpHeaders customHeaders) { HashMap response = new HashMap<>(); try { HttpHeaders headers = new HttpHeaders(); if (customHeaders != null) { headers.addAll(customHeaders); } log.info("🌐 Sending GET request to: {}", url); log.info("📦 Headers: {}", headers); ResponseEntity restResponse = restClient.get() .uri(url) .headers(h -> h.addAll(headers)) .retrieve() .toEntity(String.class); response.put("respCode", String.valueOf(restResponse.getStatusCode().value())); response.put("data", restResponse.getBody()); log.info("✅ GET Response: {}", restResponse.getStatusCode()); } catch (HttpClientErrorException | HttpServerErrorException httpException) { log.error("❌ HTTP Error: {}", httpException.getMessage(), httpException); response.put("respCode", String.valueOf(httpException.getStatusCode().value())); response.put("data", httpException.getResponseBodyAsString()); } catch (Exception e) { log.error("❌ Exception during GET call: {}", e.getMessage(), e); response.put("respCode", "500"); response.put("data", "Exception: " + e.getMessage()); } // 🟢 You missed this line earlier return response; } public HashMap getRequest(String url) { HashMap response = new HashMap<>(); try { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // log.info("🌐 Sending GET request to: {}", url); // log.info("📦 Headers: {}", headers); ResponseEntity restResponse = restClient.get() .uri(url) .headers(h -> h.addAll(headers)) .retrieve() .toEntity(String.class); response.put("respCode", String.valueOf(restResponse.getStatusCode().value())); response.put("data", restResponse.getBody()); // log.info("✅ GET Response: {}", restResponse.getBody()); } catch (HttpClientErrorException | HttpServerErrorException httpException) { log.error("❌ HTTP Error: {}", httpException.getMessage(), httpException); response.put("respCode", String.valueOf(httpException.getStatusCode().value())); response.put("data", httpException.getResponseBodyAsString()); } catch (Exception e) { log.error("❌ Exception during GET call: {}", e.getMessage(), e); response.put("respCode", "500"); response.put("data", "Exception: " + e.getMessage()); } return response; } }