【问题标题】:setEntity in HttpDeleteHttpDelete 中的 setEntity
【发布时间】:2013-01-28 11:29:18
【问题描述】:

HttpDelete 是否包含像 setEntity()、HttpPost 或 HttpPut 这样的方法? 当我使用 HttpPost 时,我会这样做:

httppost.setEntity(new UrlEncodedFormEntity(
    getNameValuePairsForFriends(context, friendID))); 

如何使用删除来做到这一点?

【问题讨论】:

标签: java android


【解决方案1】:

我不相信 HTTP DELETE 接受输入 - 我相信它的行为类似于 GET 变体。

HTTP Client 提供的实现似乎也支持这个猜想。

如果您希望通过正文提供删除,您/可能/想要考虑使用 POST 到接受正文的位置。

但在回答您的问题时,不,删除不接受正文。您可以添加查询参数,但不能添加正文。

【讨论】:

  • 根据标准 HTTP DELETE 不接受输入。但是您可能会遇到需要在 HTTP DELETE 方法中发送表单数据的服务器 API。这是错误的,但它发生了。
【解决方案2】:
class MyDelete extends HttpPost
{
    public MyDelete(String url){
        super(url);
    }
    @Override
    public String getMethod() {
        return "DELETE";
    }
}

让你的类在那边扩展http删除类,并在你的类的对象发送实体期间,你将能够在httpdelete中发布数据

HttpResponse httpResponse;
String result = null;
HttpClient httpClient = new DefaultHttpClient();

HttpConnectionParams
        .setConnectionTimeout(httpClient.getParams(), 10000);


MyDelete httpDelete = new MyDelete(urlUnfollowPatientBundle);
StringEntity entity = null;
try {
    entity = new StringEntity(rawData);
    httpDelete.setEntity(entity);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

try {

    httpResponse = httpClient.execute(httpDelete);
    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        HttpEntity httpEntity = httpResponse.getEntity();
        result = EntityUtils.toString(httpEntity);
        status = true;
    }

【讨论】:

  • 请正确格式化您的答案。目前,很难阅读。另外,请解释清楚一点,这似乎与接受的答案相冲突。
  • 你不能做httpDelete.setEntityhttpdelete 没有方法setEntity,这就是问题所在。
  • @Kayvar,阅读代码,@user2306383 扩展了 HttpPost,然后将本地变量命名为 httpPost,它确实有一个 setEntity 方法
【解决方案3】:

HTTPDelete 不会携带任何负载。

HttpDelete 只会删除要删除的 uri/url,并向所述资源发出 DELETE HTTP Header。

【讨论】:

    【解决方案4】:

    试试这个,简单扩展HttpDelete:

    类 HttpDeleteWithBody 扩展 HttpDelete {

    private HttpEntity entity;
    
    public HttpDeleteWithBody(String url) {
        super(url);
    }
    
    public HttpEntity getEntity() {
        return this.entity;
    }
    
    public void setEntity(final HttpEntity entity) {
        this.entity = entity;
    }
    

    }

    【讨论】:

      【解决方案5】:

      在 Scala 中,以下代码适用于我通过 HTTP DELETE 发送正文

      import org.apache.http.client.methods.HttpEntityEnclosingRequestBase
      import java.net.URI
      
      class HttpDeleteWithBody(uri: URI) extends HttpEntityEnclosingRequestBase {
        val METHOD_NAME: String = "DELETE"
        def getMethod: String = METHOD_NAME
        super.setURI(uri)
        setURI(uri)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        相关资源
        最近更新 更多