【问题标题】:How to make a Spring RestTemplate PATCH request [duplicate]如何发出 Spring RestTemplate PATCH 请求 [重复]
【发布时间】:2014-01-28 05:16:55
【问题描述】:

我需要使用 Spring 的 RestTemplate 使用 HTTP PATCH 动词调用服务。根据我阅读的内容,我需要使用 execute() 或 exchange() 方法,但我不知道如何使用它。服务调用返回一个 HTTP 200 OK 状态,以及一个我不是特别感兴趣的 JSON 对象。

任何帮助将不胜感激。

【问题讨论】:

  • 我不是该主题的专家,但我认为在 RestTemplate 支持之前您无法做到这一点。你可以做的是使用@RequestMapping(method = RequestMethod.PATCH)之类的东西。这是一个很好的教程如何开始:ibm.com/developerworks/web/library/wa-spring3webserv/index.html
  • RequestMethod 是服务器端,但问题是关于客户端支持。 RestTemplate 确实支持 PATCH(截至 2012 年的某个时间点,jira.spring.io/browse/SPR-7985)。所以我不确定问题是什么。你有没有尝试过(什么?)但它没有用(你怎么知道?)?
  • +1。你找到这个问题的答案了吗。 Lucas 在下面的回答似乎并不完整,因为在他的示例中 EmailPatch 类中的所有其他实例变量都将变为 null - 这不是本意。请求中只发送需要更改的实例变量。

标签: java spring resttemplate


【解决方案1】:

可以使用 PATCH 动词,但您必须使用带有 Exchange() 的 RestTemplate 类的 Apache HTTP 客户端库。您可能不需要映射器部分。下面的 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);

【讨论】:

  • 如果 EmailPatch 有其他实例变量会发生什么,例如:字符串名称,字符串类型?在您的示例中,PATCH 请求不会将它们全部更新为 null 吗?
  • 它只会修补您发送的内容。如果 EmailPatch 有其他实例变量并且您没有定义它们,它会将它们设置为 null。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 2019-02-12
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多