【问题标题】:HttpMethod.Delete not working with RestTemplate of Spring-AndroidHttpMethod.Delete 不适用于 Spring-Android 的 RestTemplate
【发布时间】:2013-09-03 03:27:12
【问题描述】:

我正在尝试使用 HttpMethod 的 DELETE 方法。我使用的代码是

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

我也在使用 JacksonJson 来映射 json。删除功能返回应该映射到响应类的 json。但调用上述行不起作用,并给出内部服务器错误 500 作为响应代码。但是,相同的 API 确实可以在浏览器中与 RESTClient 一起使用,所以我想我做的不对。

【问题讨论】:

    标签: android json jackson rest-client http-delete


    【解决方案1】:

    在做了更多研究之后,似乎 DELETE 方法不支持请求正文。由于我们可以控制 REST API,我们已经更改了要作为参数添加的请求正文。完成此更改后,请求正常工作。

    希望对某人有所帮助。

    【讨论】:

    • 我在link 找到了解决方案,可以很好地在 DELETE 方法请求中传递请求体
    • Ujjwal,谢谢,帮了大忙——这是最终解决方案
    • 为什么要发送带有正文的删除请求。它应该只有路径参数和查询参数
    【解决方案2】:

    我也想在这里加入聚会有点晚了(记录我的解决方案以供后代使用)

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

    免责声明:我使用的是 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2020-07-07
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多