Programming Language/Java & Scala
Resttemplate으로 PATCH 사용시 에러나는 경우 해결방법 - Invalid HTTP method: PATCH; nested exception is java.net.ProtocolException: Invalid HTTP method: PATCH
AndersonChoi
2019. 6. 27. 17:50
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의 오류에도 동일하게 해결 가능
반응형