Как сделать запрос Spring RestTemplate PATCH

Мне нужно сделать вызов службы, используя RestTemplate Spring, используя глагол HTTP PATCH. Из того, что я прочитал, мне нужно использовать метод execute() или exchange(), но я понятия не имею, как его использовать. Вызов службы возвращает статус HTTP 200 OK, а также объект JSON, который меня не особо интересует.

Любая помощь будет оценена спасибо.


person Reezy    schedule 28.01.2014    source источник
comment
Я не эксперт в этой теме, но я не думаю, что вы можете это сделать, пока это не будет поддерживаться RestTemplate. Что вы можете сделать, так это использовать что-то вроде @RequestMapping(method = RequestMethod.PATCH). Вот хорошее руководство, с чего начать: ibm.com/developerworks /web/library/wa-spring3webserv/index.html   -  person rlegendi    schedule 28.01.2014
comment
RequestMethod на стороне сервера, но вопрос в поддержке на стороне клиента. RestTemplate поддерживает PATCH (по состоянию на 2012 год jira.spring.io/browse/SPR- 7985). Так что я не совсем уверен, в чем вопрос. Вы пробовали что-то (что?) и это не сработало (откуда вы узнали?)?   -  person Dave Syer    schedule 08.03.2014
comment
+1. Вы нашли ответ на этот вопрос. Ответ Лукаса ниже не кажется полным, поскольку все другие переменные экземпляра в классе EmailPatch в его примере станут нулевыми, что не является целью. В запросе должна быть отправлена ​​только переменная экземпляра, которую необходимо изменить.   -  person SGB    schedule 04.04.2015


Ответы (1)


Можно использовать команду PATCH, но вы должны использовать клиентскую библиотеку Apache HTTP с классом RestTemplate с функцией exchange(). Часть картографа может вам не понадобиться. Приведенный ниже класс EmailPatch содержит только поле, которое мы хотим обновить в запросе.

  ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.registerModule(new Jackson2HalModule());

    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
    converter.setObjectMapper(mapper);

    HttpClient httpClient = HttpClients.createDefault();
    RestTemplate restTemplate = new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
    restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); 
    EmailPatch patch = new EmailPatch();
    patch.setStatus(1);
    ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.PATCH, new HttpEntity<EmailPatch>(patch),
                    String.class);
person Lucas Holt    schedule 18.02.2015
comment
Что произойдет, если EmailPatch имеет другую переменную экземпляра, например, например; Имя строки, тип строки? Разве запрос PATCH не обновит их все до нуля в вашем примере? - person SGB; 04.04.2015
comment
Он будет исправлять только то, что вы отправляете. Если у EmailPatch есть другие переменные экземпляра, и вы их не определяете, они будут установлены в null. - person Lucas Holt; 05.04.2015