RestTemplate 401 Unauthorized 오류 해결 (HttpComponentsClientHttpRequestFactory)

RestTemplate 를 사용해서 API 연동 중 API Server 또는 인증에 오류가 발생하면 HttpClientErrorException이 발생됩니다.
해당 오류가 발생되면 서버에서 발생된 HttpStatus, Body를 전달받지 못하고 401 오류가 발생되는데요.
API 서버에서 401 에러가 발생되었을 때 ResponseBody가 undefined 또는 "" 공백으로 리턴되는 오류가 발생했습니다.
이런 경우 해결할 수 있는 방법은 RestTemplate를 HttpComponentsClientHttpRequestFactory 인자로 생성하면 오류가 해결됩니다.

HttpComponentsClientHttpRequestFactory 를 사용하기 위해서는 의존성 추가를 해줘야 합니다.
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5'
restTemplate에 setRequestFactory new HttpComponentsClientHttpRequestFactory 를 추가하고 ErrorHandler를 추가합니다.
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {public boolean hasError(ClientHttpResponse response) throws IOException {HttpStatus statusCode = response.getStatusCode();return statusCode.series() == HttpStatus.Series.SERVER_ERROR;}});
HttpEntity<?> requestEntity = apiClientHttpEntity(param.toString());RestTemplate restTemplate = new RestTemplate();restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {public boolean hasError(ClientHttpResponse response) throws IOException {HttpStatus statusCode = response.getStatusCode();return statusCode.series() == HttpStatus.Series.SERVER_ERROR;}});MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();restTemplate.getMessageConverters().add(converter);ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(URL, HttpMethod.POST, requestEntity, JSONObject.class);
