2016-12-28 3 views
0

ich Frühling 1.4.3Resttemplate und Patch, ungültige

ich versuche, eine Service-Web zu nennen

@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); 
    } 

In meiner Anwendung,

@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(); 
    } 

} 

In einer anderen Methode, die ich tun

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); 

Ich bekomme diesen Fehler

java.net.ProtocolException: Ungültige HTTP-Methode: PATCH bei java.net.HttpURLConnection.setRequestMethod (HttpURLConnection.java:440) ~ [Na: 1.8.0_111] bei sun.net.www. protocol.http.HttpURLConnection.setRequestMethod (HttpURLConnection.java:552) ~ [na: 1.8.0_111]

Antwort

0

Http Patch ist nicht von HttpURLConnection unterstützt. Siehe this

Um dies zu lösen, ist die Restvorlage so zu konfigurieren, dass sie hptpComponentsClientHttpRequestFactor von spring verwendet.

RestTemplateBuilder macht den Anforderungsfactory-Setter verfügbar, der dazu verwendet werden sollte.

+0

ich war in Java 6 ... 2013 ... ein bisschen alt –

+0

Ja. Das war, als Patch kürzlich eingeführt wurde. Und sie beschlossen, es als einen Willen zu markieren, nicht zu beheben. Allerdings bieten Spring und Apache Unterstützung für Patch, indem sie es intern als Put behandeln. Um den Frühling dafür zu verwenden, müssen Sie die http-Anfragefabrik des Frühlinges benutzen (wie ich in meiner Antwort erwähnte) –

Verwandte Themen