HttpClient中,使用HttpDelete时无法携带body的解决办法

今天在使用HttpDelete执行DELETE操作的时候,发现HttpDelete不支持setEntity方法,所以不能携带body信息。
其原因是在HttpMethods中,包含HttpGet, HttpPost, HttpPut, HttpDelete等类来实现http的常用操作。其中,HttpPost继承自HttpEntityEnclosingRequestBase,HttpEntityEnclosingRequestBase类又实现了HttpEntityEnclosingRequest接口,实现了setEntity的方法。 而HttpDelete继承自HttpRequestBase,没有实现setEntity的方法,因此无法设置HttpEntity对象。
我们的解决方案是重写一个MyHttpDelete类,继承自HttpEntityEnclosingRequestBase,覆盖其中的getMethod方法,从而返回DELETE。
类代码如下:

package com.tester.utils;

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;

import java.net.URI;

/**
 * HttpClient自带的HttpDelete方法是不支持上传body的,所以重写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请求时,使用我们重写的MyHttpDelete方法,就可以使用了!

MyHttpDelete delete = new MyHttpDelete(url);
StringEntity entity = new StringEntity(param, "utf-8");
delete.setEntity(entity);

猜你喜欢

转载自blog.csdn.net/lt326030434/article/details/80989533