我有一个问题,如何使用Spring REST DATA和RestTemplate进行PUT操作来更新两个bean之间的关系。
我使用curl成功更新,但我无法使用RestTemplate进行更新。
curl -i -X PUT -d 'http://localhost:8383/services/67' -H "Content-Type:text/uri-list" localhost:8383/routes/135/service
这样可行,它使用对服务对象67的引用更新我的Route对象,但我尝试使用以下RestTemplate执行此操作,但不是。
ResponseEntity<Route> responseEntity = restTemplate.exchange("http://localhost:8383/routes/", HttpMethod.POST, requestEntity, Route.class);
if(responseEntity.getStatusCode() == HttpStatus.CREATED) {
HttpHeaders reqHeaders = new HttpHeaders();
reqHeaders.add(HttpHeaders.CONTENT_TYPE, new MediaType("text", "uri-list").toString());
HttpEntity<Service> requestEntityService = new HttpEntity<>(service, reqHeaders);
restTemplate.put("http://localhost:8383/routes/" + responseEntity.getBody().getId() + "/service", requestEntityService);
}
如果我尝试这个,它抱怨它找不到'uri-list'的任何MessageConverter但是如果我删除'uri-list'然后Spring Rest Data用'404'响应,因为它似乎这样做仅使用'uri-list'进行操作..
虽然我也使用Spring HATEOAS项目,但我定义了一个特殊的MessageConvter,....
@Bean
private RestTemplate prepareRestTemplate(RestTemplateBuilder restTemplateBuilder) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.registerModule(new Jackson2HalModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setDefaultCharset(Charset.forName("UTF-8"));
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json")); converter.setObjectMapper(objectMapper);
return restTemplateBuilder.messageConverters(converter).build();
}
这适用于POST操作并在Spring Rest Data中创建bean,我还必须在这里定义MediaType'urri-list'。
我在互联网上看到很多例子如何用curl做这个但是没有用RestTemplate怎么做,当然我可以用HttpClient来做到这一点,但自然这会很奇怪。
任何提示?
答案的答案