HttpMethod.Delete在Spring-Android的RestTemplate中无法使用

10

我正在尝试使用HttpMethod的DELETE方法。 我使用的代码如下:

response = restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, Response.class);

我还使用JacksonJson来映射JSON。删除功能返回应该映射到Response类的JSON。但是调用上述代码行不起作用,并以500作为响应代码给出内部服务器错误。但是,同样的API在浏览器中使用RESTClient确实有效,所以我猜我做错了什么。

2个回答

9
经过进一步的研究,似乎DELETE方法不支持请求正文。由于我们掌控着REST API,我们已经将请求正文改为添加为参数。在进行此更改后,请求成功运行。
希望这能帮助到某些人。

5
我在这个链接(http://knowledgebrowse.blogspot.com/2013/08/spring-resttemplate-calling-delete.html)找到了一个解决方案,可以很好地传递DELETE方法请求中的请求主体。 - Ujjwal
Ujjwal,非常感谢你的帮助 - 这是最终解决方案。 - Taras Vovkovych
为什么要发送带有主体的删除请求?它应该只有路径参数和查询参数。 - Saroj Kumar Sahoo

0

我有点晚来报道,但我也想在这里发表意见(为后人记录我的解决方案)

我也在使用Spring的rest template,尝试使用有效负载执行删除请求,并且我还希望能够从服务器端获取响应代码

免责声明:我使用的是Java 7

我的解决方案也基于SO上的一篇文章,基本上你最初声明一个POST请求,然后添加一个HTTP头来覆盖请求方法:

RestTemplate tpl = new RestTemplate();

/*
 * http://bugs.java.com/view_bug.do?bug_id=7157360
 * As long as we are using java 7 we cannot expect output for delete
 * */
HttpHeaders headers = new HttpHeaders();
headers.add("X-HTTP-Method-Override", "DELETE");

HttpEntity<Collection<String>> request = new HttpEntity<Collection<String>>(payload, headers);
ResponseEntity<String> exchange = tpl.exchange(uri, HttpMethod.POST, request, String.class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接