重写HttpClient的HttpGet/HttpDelete支持body提交参数

2019-04-15  文晶 

背景:在通过httpclient为基础封装http协议接口测试工具类时,遇到get/del接口需要提交携带body(json)格式数据作为参数,但是HttpGet/HttpDelete不支持setEntity()方法不能像HttpPost那样通过setEntity()携带body(json类型)提交参数。在分析了HttpPost后,对比如下:HttpPost 继承了HttpEntityEnclosingRequestBase 类,HttpEntityEnclosingRequestBase此类继承HttpRequestBase同时还实现了setEntity()方法。而HttpGet/HttpDelete只继承HttpRequestBase并未实现setEntity().因此无法设置HttpEntity对象。
解决方案:重写一个MyHttpDelete/MyHttpGet类,继承自HttpEntityEnclosingRequestBase,覆盖其中的getMethod方法,从而返回DELETE/GET。

/**
 * 重写httpGet支持body提交
 */
public class MyHttpGet extends HttpEntityEnclosingRequestBase {
    public static final String METHOD_NAME = "GET";
    @Override
    public String getMethod() {
        return METHOD_NAME;
    }
    public MyHttpGet(final String uri) {
        super();
        setURI(URI.create(uri));
    }

    public MyHttpGet(final URI uri) {
        super();
        setURI(uri);
    }

    public MyHttpGet() {
        super();
    }
}

使用:

MyHttpGet httpGet = new MyHttpGet(url); 
// 创建请求内容 
StringEntity entity = new StringEntity(params, ContentType.APPLICATION_JSON); 
httpGet.setEntity(entity); 
// 执行http请求 
response = httpClient.execute(httpGet);
2294°/22946 人阅读/0 条评论 发表评论

登录 后发表评论