传递参数&使用Apache HttpDelete for Rest Web Service Android的标头

时间:2013-05-02 11:11:40

标签: android web-services rest apache-httpclient-4.x http-delete

我有一个HTTP DELETE方法的终点。 我想传递一些标题,更具体地说是Content-Type=application/x-www-form-urlencoded。 还有一些参数,基于这些参数,在服务器端将决定应该删除哪个记录。 我无法访问服务器实施。

我正在使用apache HTTP client。我的HTTP DELETE方法如下:

private String doDelete(String url, Map<String,String> params, Map<String,String> headerMap){

    HttpClient httpClient = new DefaultHttpClient(httpParams);
    HttpDelete httpDelete = new HttpDelete(httpRequestWrapper.getUrl());

    if(headerMap != null){
        for(String headerName : headerMap.keySet()){
            httpDelete.addHeader(headerName, headerMap.get(headerName));
        }
    }

    if(params != null){         
        for(String paramName : params.keySet()){
            httpParams.setParameter(paramName, params.get(paramName));
        }
        httpDelete.setParams(httpParams);
    }

    HttpResponse httpResponse = httpClient.execute(httpDelete);
    HttpEntity httpEntity = httpResponse.getEntity();
    String responseStr = getASCIIContentFromEntity(httpEntity);
    return responseStr; 
}

问题是,我看到(在调试模式下)参数在我的结束的删除请求中正确传递。但是在服务器端,参数是空白的。有什么方法可以传递参数&amp;标题成功了?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

逐字传递标题可能会导致问题。

考虑到上述情况,请注意,在实施时,HttpDelete方法不会占用主体,因此与您的请求相关联的特定Content-Type标头可能会导致容器混乱。

尝试从包含Content-Type的客户端中省略标题,看看是否能解决您的问题。

编辑 AH !!发现了这个问题! setParams方法令人困惑。根据HTTP Client 4.x的文档

  

提供用于处理此消息的参数。

您在代码中设置的参数将不会被传递,因为它们被传送到执行请求的底层客户端。

This SO article为您尝试的内容定义了适当的方法。