java中使HttpDelete可以发送body信息

RESTful api中用到了DELETE方法,android开发的同事遇到了问题,使用HttpDelete执行DELETE操作的时候,不能携带body信息,研究了很久之后找到了解决方法。 我们查看httpclient-4.2.3的源码可以发现,methods包下面包含HttpGet, HttpPost, HttpPut, HttpDelete等类来实现http的常用操作。 其中,HttpPost继承自HttpEntityEnclosingRequestBase,HttpEntityEnclosingRequestBase类又实现了HttpEntityEnclosingRequest接口,实现了setEntity的方法。 而HttpDelete继承自HttpRequestBase,没有实现setEntity的方法,因此无法设置HttpEntity对象。 这样解决方法就明显了,我们可以自己实现一个MyHttpDelete类,继承自HttpEntityEnclosingRequestBase,覆盖其中的getMethod方法,使其返回“DELETE”。

public class MyHttpDelete extends HttpEntityEnclosingRequestBase {

public static final String METHOD_NAME = "DELETE";

public String getMethod() {

return METHOD_NAME;

}

public MyHttpDelete(final String uri) {

super();

setURI(URI.create(uri));

}

public MyHttpDelete(final URI uri) {

super();

setURI(uri);

}

public MyHttpDelete() {

super();

}

}

使用delete方法时,直接可以按下面方式操作

DefaultHttpClient httpClient = new DefaultHttpClient();

MyHttpDelete delete = new MyHttpDelete("http://url.com");

List nameValuePairs = new ArrayList();

delete.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpClient.execute(delete);

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐