0
我用弹簧1.4.3Resttemplate和补丁,无效
我尝试调用Web服务
@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方法:在PATCH java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:440) 〜[NA:1.8.0_111]在 sun.net.www。 protocol.http.HttpURLConnection.setRequestMethod(HttpURLConnection.java:552) 〜[NA:1.8.0_111]
我在java 6 ... 2013 ...有点旧 –
是的。那是最近推出Patch的时候。他们决定将其标记为“无法修复”。话虽如此,Spring和apache通过内部处理它来提供对Patch的支持。为了使用spring,你需要使用spring的客户端http请求工厂(就像我在我的回答中提到的那样) –