
com.hecloud.runtime.common.restful.ExtendRestClient Maven / Gradle / Ivy
package com.hecloud.runtime.common.restful;
import com.hecloud.runtime.common.enums.HttpMethod;
import com.hecloud.runtime.common.model.Result;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.FormBodyPartBuilder;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.util.Asserts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.*;
/**
* 扩展的HttpClient
*
* @author LoveinBJ
*/
public class ExtendRestClient extends RestClient {
private static Logger logger = LoggerFactory.getLogger(ExtendRestClient.class);
protected HttpEntity httpEntity = null;
/**
* 返回响应headers的get请求
*
* @param headers 请求头部
* @param params 请求参数
* @param uri 请求路径
* @return 请求结果
*/
public Result getWithHeaders(Map headers, Map params, String uri) {
Asserts.notBlank(uri, "URI IS EMPTY!");
logger.debug("Uri is{} and Param is {}", uri, params);
uri = buildURL(uri, params);
httpGet = new HttpGet(uri);
buildHeader(httpGet, headers);
httpGet.setConfig(config);
processWithHeaders(httpGet);
return result;
}
/**
* 返回响应headers的post请求
*
* @param headers 请求头部
* @param params 请求参数
* @param uri 请求路径
* @return 请求结果
*/
public Result postWithHeaders(Map headers, Map params, String uri) {
Asserts.notBlank(uri, "URI IS EMPTY!");
httpPost = new HttpPost(uri);
// 设置请求和传输超时时间
httpPost.setConfig(config);
logger.debug("uri is = {} | params is {}", uri, params);
buildHeader(httpPost, headers);
buildEntity(httpPost, params);
processWithHeaders(httpPost);
return result;
}
/**
* 文件上传
*
* @param headers 请求头部
* @param params 请求参数
* @param file 上传文件
* @param uri 请求路径
* @param method 请求方法
* @return 上传结果
*/
public Result upload(Map headers, Map params, File file, String uri,
HttpMethod method) {
Result result;
switch (method) {
case POST:
result = postUpload(headers, params, file, uri);
break;
case PUT:
result = putUpload(headers, params, file, uri);
break;
default:
result = new Result(false, "方法暂不支持", "方法暂不支持");
break;
}
return result;
}
/**
* post方法文件上传
*
* @param headers 请求头部
* @param params 请求参数
* @param file 上传文件
* @param uri 请求路径
* @return 上传结果
*/
public Result postUpload(Map headers, Map params, File file, String uri) {
Asserts.notBlank(uri, "URI IS EMPTY!");
httpPost = new HttpPost(uri);
// 设置请求和传输超时时间
httpPost.setConfig(config);
buildHeader(httpPost, headers);
params = Optional.ofNullable(params).orElse(new HashMap<>(1));
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setLaxMode();
builder.addBinaryBody("file", file, ContentType.create("multipart/form-data", "UTF-8"), file.getName());
Set keySet = params.keySet();
for (String key : keySet) {
builder.addPart(FormBodyPartBuilder.create().addField(key, params.get(key)).build());
}
httpEntity = builder.build();
httpPost.setEntity(httpEntity);
doPost();
return result;
}
/**
* put方法文件上传
*
* @param headers 请求头部
* @param params 请求参数
* @param file 上传文件
* @param uri 请求路径
* @return 上传结果
*/
public Result putUpload(Map headers, Map params, File file, String uri) {
Asserts.notBlank(uri, "URI IS EMPTY!");
httpPut = new HttpPut(uri);
// 设置请求和传输超时时间
httpPut.setConfig(config);
buildHeader(httpPut, headers);
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setLaxMode();
InputStream inputStream;
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e1) {
logger.error("文件不存在!", e1);
return new Result(false, "文件不存在", "文件不存在!");
}
builder.addBinaryBody("upload-file", inputStream, ContentType.APPLICATION_FORM_URLENCODED, file.getName());
if (null != params) {
Set keySet = params.keySet();
for (String key : keySet) {
builder.addPart(FormBodyPartBuilder.create().addField(key, params.get(key)).build());
}
}
httpEntity = builder.build();
httpPut.setEntity(httpEntity);
try {
response = httpClient.execute(httpPut);
handleResponse();
} catch (IOException e) {
logger.error("RestClient Exception:", e);
result = new Result(false, e.getMessage(), e.getMessage());
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
logger.error("InputStream close error!", e);
}
}
close();
}
return result;
}
/**
* 相同参数请求
*
* @param headers 请求头部
* @param params 请求参数
* @param uri 请求路径
* @return 请求结果
*/
public Result sameParamPost(Map headers, List params, String uri) {
Asserts.notBlank(uri, "URI IS EMPTY!");
logger.debug("uri is = {} | params is {}", uri, params);
httpPost = new HttpPost(uri);
// 设置请求和传输超时时间
httpPost.setConfig(config);
buildEntity(httpPost, params);
buildHeader(httpPost, headers);
doPost();
return result;
}
void doPost() {
try {
response = httpClient.execute(httpPost);
handleResponse();
} catch (IOException e) {
logger.error("RestClient Exception:", e);
result = new Result(false, e.getMessage(), e.getMessage());
} finally {
close();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy