我有一个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;标题成功了?
感谢任何帮助。
答案 0 :(得分:1)
逐字传递标题可能会导致问题。
考虑到上述情况,请注意,在实施时,HttpDelete方法不会占用主体,因此与您的请求相关联的特定Content-Type标头可能会导致容器混乱。
尝试从包含Content-Type的客户端中省略标题,看看是否能解决您的问题。
编辑 AH !!发现了这个问题! setParams方法令人困惑。根据HTTP Client 4.x的文档
提供用于处理此消息的参数。
您在代码中设置的参数将不会被传递,因为它们被传送到执行请求的底层客户端。
This SO article为您尝试的内容定义了适当的方法。