前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HttpDelete携带json参数(body)的方法

HttpDelete携带json参数(body)的方法

作者头像
Li_XiaoJin
发布2022-06-10 21:48:07
2.2K0
发布2022-06-10 21:48:07
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

记录,避免重复造轮子。

我们使用 Httpclient 时常用的请求有2个,HttpPost 和 HttpGet,一般 HttpPost 对传参 Json 的处理是:

代码语言:javascript
复制
HttpPost httpPost= new HttpPost(url);
post.setEntity(new StringEntity(jsonString));

但 HttpDelete 携带 json 参数时,不支持 setEntity 方法,

其中不支持的原因是: 在 HttpMethods 中,包含 HttpGet, HttpPost, HttpPut, HttpDelete 等类来实现 http 的常用操作。其中,HttpPost 继承自 HttpEntityEnclosingRequestBase,HttpEntityEnclosingRequestBase 类又实现了 HttpEntityEnclosingRequest 接口,实现了 setEntity 的方法。

而 HttpDelete 继承自HttpRequestBase,没有实现 setEntity 的方法,因此无法设置 HttpEntity 对象。

这里解决的方案是:重写一个自己的 HttpDeleteWithBody 类,继承自 HttpEntityEnclosingRequestBase,覆盖其中的 getMethod 方法,从而返回 DELETE。

HttpDeleteWithBody.java

代码语言:javascript
复制

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

import java.net.URI;

public class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase {

    public static final String METHOD_NAME = "DELETE";

    @Override
    public String getMethod() { return METHOD_NAME; }

    public HttpDeleteWithBody(final String uri) {
        super();
        setURI(URI.create(uri));
    }
    public HttpDeleteWithBody(final URI uri) {
        super();
        setURI(uri);
    }
    public HttpDeleteWithBody() { super(); }

}

然后写发送请求的方法:

代码语言:javascript
复制
    public static String sendDelete(String url, String jsonStr, String contentType, Map<String, String> headParam) {

        CloseableHttpResponse response = null;
        String resultString = "";
        // 创建Httpclient对象
        try (CloseableHttpClient httpClient = HttpClients.createDefault();) {
            // 创建HttpDelete请求
            HttpEntityEnclosingRequestBase requestBase = new HttpDeleteWithBody(url);

            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000)
                    .setConnectionRequestTimeout(30000).setSocketTimeout(30000).build();
            requestBase.setConfig(requestConfig);
            requestBase.addHeader("Content-type", !(contentType == null || "".equals(contentType)) ? contentType : "application/json;charset=utf-8");
            requestBase.setHeader("Accept", "application/json");
            packageHeader(headParam, requestBase);

            log.info("requestUrl:{}", url);
            log.info("requestStr:{}", jsonStr);
            // 创建请求内容
            if (jsonStr != null) {
                StringEntity entity = new StringEntity(jsonStr, ContentType.APPLICATION_JSON);
                requestBase.setEntity(entity);
            }
            long beginTime = System.currentTimeMillis();
            // 执行http请求
            response = httpClient.execute(requestBase);
            log.info("接口耗时:{}", System.currentTimeMillis() - beginTime);
            resultString = EntityUtils.toString(response.getEntity(), DEFAULT_CHARSET);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

httpclient maven依赖

代码语言:javascript
复制
        <!-- 添加httpClient工具包 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5</version>
        </dependency>

End.

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/httpdelete携带json参数body的方法

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com