【问题标题】:How to set RequestBody for Http Delete method.如何为 Http Delete 方法设置 RequestBody。
【发布时间】:2024-01-01 22:05:01
【问题描述】:

我正在为删除 API 的服务器编写客户端代码。 API 规范要求发送数据。我正在使用 HttpComponents v3.1 库来编写客户端代码。使用HtpDelete 类我找不到向它添加请求数据的方法。有没有办法这样做?下面是代码sn-p。

        HttpDelete deleteReq = new HttpDelete(uriBuilder.toString());
    List<NameValuePair> postParams = new ArrayList<NameValuePair>();
    postParams.add(new BasicNameValuePair(RestConstants.POST_DATA_PARAM_NAME, 
            postData.toString()));
    try {
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
        entity.setContentEncoding(HTTP.UTF_8);
        //deleteReq.setEntity(entity); // There is no method setEntity()
        deleteReq.setHeader(RestConstants.CONTENT_TYPE_HEADER, RestConstants.CONTENT_TYPE_HEADER_VAL);
    } catch (UnsupportedEncodingException e) {
        logger.error("UnsupportedEncodingException: " + e);
    }

提前致谢。

【问题讨论】:

  • 出于好奇:那是什么 API? (需要一个 DELETE 请求正文)
  • 它是一个自定义的 3rd 方 REST API。 :)

标签: http httpclient apache-httpcomponents http-delete


【解决方案1】:

为什么不这样做:-)

class MyHttpDelete extends HttpPost{
    @Override
    public String getMethod() {
        return "DELETE";
    }
}

【讨论】:

    【解决方案2】:

    我还没有尝试过这个,它就像地狱一样骇人听闻,如果事实证明有更好的解决方案,我会感到更高兴,但是您可以尝试扩展 PostMetod 并覆盖 getName() 方法以返回“DELETE”。

    【讨论】: