使用Spring Rest Data和Rest Template进行PUT操作

时间:2017-09-19 07:18:36

标签: spring rest spring-rest spring-hateoas

我有一个问题,如何使用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来做到这一点,但自然这会很奇怪。

任何提示?

答案的答案

0 个答案:

没有答案