问题描述:需要访问外部delete修饰的接口。hutool工具类的HttpUtils修饰的方法中只有get 和post 请求,需要自己重写
如果使用post 和get 则会报405问题
package com.zhada.cloud.transit.infrastructure.utils;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpEntity;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.Map;
public class HttpUtils {
/**
* HttpClient发送json字符串post请求
*
* @param
* @param json
* @return
*/
public static HttpResult sendPost(String url, Map<String, Object> headers, String json) {
HttpResult result = null;
CloseableHttpClient httpClient = HttpClients.createDefault();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
//第一步:创建HttpClient对象
httpClient = HttpClients.createDefault();
//第二步:创建httpPost对象
HttpPost httpPost = new HttpPost(url);
//第三步:给httpPost设置JSON格式的参数
StringEntity requestEntity = new StringEntity(json, "utf-8");
requestEntity.setContentEncoding("UTF-8");
if (headers !=null)
{
for (Map.Entry<String, Object> entry : headers.entrySet()) {
httpPost.setHeader(entry.getKey(), String.valueOf(entry.getValue()));
}
}
httpPost.setEntity(requestEntity);
//第四步:发送HttpPost请求,获取返回值
String msg = httpClient.execute(httpPost, responseHandler);
result = JSON.parseObject(msg,HttpResult.class);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//第五步:处理返回值
return result ;
}
public static String doDelete(String data, String url) throws IOException {
CloseableHttpClient client = null;
HttpDeleteWithBody httpDelete = null;
String result = null;
try {
client = HttpClients.createDefault();
httpDelete = new HttpDeleteWithBody(url);
httpDelete.addHeader("Content-type","application/json; charset=utf-8");
httpDelete.setHeader("Accept", "application/json; charset=utf-8");
httpDelete.setEntity(new StringEntity(data));
CloseableHttpResponse response = client.execute(httpDelete);
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity);
if (200 == response.getStatusLine().getStatusCode()) {
}
} catch (Exception e) {
} finally {
client.close();
}
return result;
}
public static class HttpResult
{
private String flag;
private String code;
private String msg;
private String lid;
private String datas;
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getLid() {
return lid;
}
public void setLid(String lid) {
this.lid = lid;
}
public String getDatas() {
return datas;
}
public void setDatas(String datas) {
this.datas = datas;
}
}
}
package com.zhada.cloud.transit.infrastructure.utils;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import java.net.URI;
public class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase {
public static final String METHOD_NAME = "DELETE";
/**
* 获取方法(必须重载)
*
* @return
*/
@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();
}
}