2016-12-28 1 views
0

내가 사용하는 스프링 1.4.3Resttemplate 및 패치, 무효

나는 웹 서비스를 내 응용 프로그램에서

@PatchMapping(value = "/members/{memberId}/card") 
    public ResponseEntity updateMemberCardId(@PathVariable("memberId") Long memberId, @RequestBody String cardId) throws ResourceNotFoundException { 
     memberService.updateMemberCardId(cardId, memberId); 
     return new ResponseEntity<>(HttpStatus.NO_CONTENT); 
    } 

를 호출하려고, 또 다른 방법은

@Component 
@Configuration 
public class ClientRestConfig { 

    @Bean 
    public RestTemplate restTemplate(RestTemplateBuilder builder, @Value("${main.server.url}") String mainServerUrl, @Value("${commerce.username}") String commerceUsername, @Value("${commerce.password}") String commercePassword, @Value("${connection.timeout}") int timeout) { 
     return builder.setConnectTimeout(timeout).setReadTimeout(timeout).basicAuthorization(commerceUsername, commercePassword).rootUri(mainServerUrl).build(); 
    } 

} 

내가

String cardId = "123456789"; 

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_JSON); 
HttpEntity<String> entity = new HttpEntity<>(cardId, headers); 

ResponseEntity responseEntity = restTemplate.patchForObject("/rest/members/1/card", entity, ResponseEntity.class); 

이 오류가 발생합니다.

java.net.ProtocolException : 잘못된 HTTP 방식 : java.net.HttpURLConnection.setRequestMethod (HttpURLConnection.java:440) 에서 PATCH ~ [NA : 1.8.0_111] sun.net.www에서. protocol.http.HttpURLConnection.setRequestMethod (HttpURLConnection.java:552) ~ 가 [NA : 1.8.0_111]

답변

0

HTTP를 HttpURLConnection의 패치에 의해 지원되지 않는다. this

이 문제를 해결하는 방법은 나머지 템플릿이 Spring의 HttpComponentsClientHttpRequestFactory를 사용하도록 구성하는 것입니다.

RestTemplateBuilder는이를 수행하는 데 필요한 필수 입력자를 노출합니다.

+0

자바 6 ... 2013 ... 조금 오래됨 –

+0

네. 패치가 최근에 도입되었을 때 그랬습니다. 그리고 그들은 그것을 고치지 않는 것으로 표시하기로 결정했습니다. 그런 말로, Spring과 Apache는 내부적으로 Put으로 처리함으로써 Patch에 대한 지원을 제공합니다. 이를 위해 스프링을 사용하려면 Spring의 클라이언트 http 요청 팩토리를 사용해야한다. –