RestTemplate 을 활용한 http api 통신 응답코드가
4xx (CLIENT_ERROR), 5xx (SERVER_ERROR) 인 경우 RestClientException 반환
String 형 응답 데이터를 JSONObject 형 변수에 담으려고 했기 때문에 RuntimeException 발생
import org.springframework.web.client.RestTemplate;
import org.springframework.http.*;
import org.springframework.util.*;
import org.json.simple.JSONObject; // JSON 객체를 추상화한 클래스 (HashMap 클래스 상속)
@Getter
private RestTemplate restTemplate;
2-1. JSONObject 형 변수로 받기
private JSONObject receiveResJsonObjData(String url, HttpHeaders requestHeader, Map requestBody) {
ResponseEntity<JSONObject> responseEntity = null;
try {
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestHeader, requestBody, JSONObject.class);
} catch(RestClientException rce) {
// RestClientException 발생!
}
return responseEntity.getBody();
}
2-2. String 형 변수로 받기
private JSONObject receiveResStrData(String url, HttpHeaders requestHeader, Map requestBody) {
ResponseEntity<String> responseEntity = null;
String responseStrBody = "";
try {
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestHeader, requestBody, String.class);
} catch(RestClientException rce) {}
if (StringUtil.isNotNull(responseEntity) {
responseStrBody = responseEntity.getBody();
}
return JsonUtil.toObject(responseStrBody, JSONObject.class); // ObjectMapper json String to JSONObject
}
- 스크래핑 응답 데이터의 경우 json String 형태로 전달
- 송신과 수신의 응답 데이터 형을 동일하게 설정해줘야 정상 수신 가능