Spring boot 내에서 Resttemplate를 사용하여 타 url을 호출하는 경우가 있다. 사용하던 도중 아래와 같은 오류가 날 때가 있다.
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
URI uri = new URI(Api.patchJob(host));
String active = "{\"active\":true}";
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(active, headers);
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.PATCH, entity, String.class);
HttpStatus resultStatus = response.getStatusCode();
//오류메시지..
org.springframework.web.client.ResourceAccessException: I/O error on PATCH
request for "http://localhost:8081/api/jobs": Invalid HTTP method: PATCH;
nested exception is java.net.ProtocolException: Invalid HTTP method: PATCH
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:710)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:598)
...
상기에러는 Resttemplate이 http method 중 하나인 PATCH를 사용하여 호출하지 못해서 생기는 오류이다.
이 때 아래와 같이 수행하면 해결 가능하다.
단계1 : library 추가
apache의 httpcomponents의 httpclient 추가
dependencies {
...
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
...
}
단계2 : 코드 변경
RestTemplate 객체 생성시 apache HttpClientFactory 주입하여 생성
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
HttpHeaders headers = new HttpHeaders();
URI uri = new URI(Api.patchJob(host));
String active = "{\"active\":true}";
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(active, headers);
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.PATCH, entity, String.class);
HttpStatus resultStatus = response.getStatusCode();
이후 완벽하게 오류가 해결된 것을 볼 수 있다. Resttemplate의 PUT method의 오류에도 동일하게 해결 가능
반응형
'Programming Language > Java & Scala' 카테고리의 다른 글
JVM 버젼별 Scala 하위호환표(JDK Compatibility for scala) (0) | 2020.02.18 |
---|---|
DateTimeFormatter에서 년도표시에 yyyy대신 uuuu를 사용해야하는 이유? (0) | 2019.11.21 |
Spring boot Resttemplate 사용시 HttpComponentsClientHttpRequestFactory 옵션 설명(setConnectTimeout, setConnectionRequestTimeout, setReadTimeout) (393) | 2019.06.28 |
Android studio에서 gradle upgrade시 deprecated feature 확인 옵션 켜는 방법 (392) | 2019.05.08 |
Java gc log 분석, 시각화하는 무료 사이트 추천 gceasy.io (407) | 2019.05.07 |
Java8이상에서 MaxMetaspaceSize 설정, 반드시 해야할까? (262) | 2019.04.30 |