如果有更好的方法 可以在评论留下链接
1.添加相关依赖
<!-- feign-okhttp -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>11.7</version>
</dependency>
1.get请求
/**
* OkHttpClient Get请求
* @param url 请求地址
* @return
*/
public Result<?> httpClientGet (String url) {
try {
Response lsresponse = null;
OkHttpClient lsclients = new OkHttpClient().newBuilder()
.build();
Request lsrequest = new Request.Builder()
.url(url)
.get()
.build();
lsresponse = lsclients.newCall(lsrequest).execute();
if (lsresponse.isSuccessful()) {
return Result.ok(lsresponse.body().string());
}else {
return Result.error("请求数据错误!");
}
} catch (IOException e) {
e.printStackTrace();
return Result.error("数据接口请求失败");
}
}
请求时如果需要加header 可直接在addHeader中添加
2.Post请求
/**
* OkHttpClient Post请求
* @param url 请求地址
* @param bodys 请求体传参
* @param token 请求token
* @return
*/
public Result<?> httpClientPost (String url , String bodys, String token) {
try {
Response lsresponse = null;
OkHttpClient lsclients = new OkHttpClient().newBuilder()
.build();
MediaType lsmediaTypes = MediaType.parse("application/json");
RequestBody body = RequestBody.create(lsmediaTypes, bodys);
Request lsrequest = new Request.Builder()
.url(url)
.method("POST", body)
.addHeader("Authorization",token)
.addHeader("Content-Type", "application/json")
.build();
lsresponse = lsclients.newCall(lsrequest).execute();
if (lsresponse.isSuccessful()) {
return Result.ok(lsresponse.body().string());
}else {
return Result.error("请求数据错误!");
}
} catch (IOException e) {
e.printStackTrace();
return Result.error("数据接口请求失败");
}
}
3.文件上传
感觉这种文件上传性能比较低,请求慢,目前我还没写过其他的文件上传请求
/**
*param doPostMulti post请求
*param filePath 文件地址
*param dataId 数据id
*/
public String doPostMulti(String filePath,String dataId) {
Result result = httpClient.getToken(tokenUrl);
String token = result.getMessage();
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(uploadUrl);
URL url2 = new URL(filePath);
URLConnection urlConn = url2.openConnection();
InputStream input = urlConn.getInputStream();
// 创建请求内容
MultipartEntityBuilder builder =
MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
builder.addBinaryBody("file", input, ContentType.DEFAULT_BINARY,
filePath.substring(filePath.indexOf("=")+1));
builder.addTextBody("dataId", dataId);
builder.setContentType(ContentType.MULTIPART_FORM_DATA);
builder.setBoundary("----egevgdsewgeagdvsdfergergsvgds");//随机字符串
builder.setCharset(UTF_8);
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
httpPost.addHeader("Authorization", token);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
4.附加处理
可能有更好的处理方式,我暂时使用的是这种
list格式数据处理
//data为请求的返回值,为字符串类型 lsresponse.body().string()
List<Map> arrayList = new ArrayList();
SONObject object = JSONObject.parseObject(data);
String datalist = object.getString("data");
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Map.class);
arrayList = objectMapper.readValue(datalist, listType);
map格式数据处理
//data为请求的返回值,为字符串类型 lsresponse.body().string()
Map<String, Object> hashMap = new HashMap<>();
JSONObject object = JSONObject.parseObject(data);
String datalist = object.getString("result");
MapType mapType = objectMapper.getTypeFactory().constructMapType(Map.class, String.class, Object.class);
hashMap = objectMapper.readValue(datalist, mapType);