You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
5.6 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.kiisoo.ic.utils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.kiisoo.ic.common.ErrorMesage;
import com.kiisoo.ic.common.MessageException;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author dexiang
* @date 2017/10/30
* @company kiisoo
* @details okhttp工具类
*/
public class OkhttpUtil {
/**
* 日志打印
*/
private static final Logger logger = LoggerFactory.getLogger(OkhttpUtil.class);
/**
* 实例
*/
private static OkhttpUtil instance;
/**
* 请求管理实例
*/
private OkHttpClient okHttpClient;
/**
* 认证token
*/
private static String authorization;
/**
* 客流认证token
*/
private static String token;
public static String getToken() {
return token;
}
public static void setToken(String token) {
OkhttpUtil.token = token;
}
/**
* 错误的key
*/
private static final String ERROS = "erros";
/**
* 此处配置OkHttpClient的基本信息 okhttp3在new对象并需要配置参数一般通过build这个方法来实现 类似的还有Request
* 构建形式如:new XXX.Builder().xxx().xxx().build();
*
* @author dexiang.jiang
*/
private OkhttpUtil() {
okHttpClient = new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS)
.build();
}
/**
* 单例模式
*
* @return 返回OkhttpUtil实例
* @author dexiang.jiang
*/
public static OkhttpUtil getInstance() {
if (instance == null) {
synchronized (OkhttpUtil.class) {
if (instance == null) {
instance = new OkhttpUtil();
}
}
}
return instance;
}
/**
* 传入JSON字符串结果 判断错误信息并抛出异常
*
* @param result 结果
* @return 返回JSON字符串
*/
public String isResult(String result) throws MessageException {
if (result.contains(ERROS)) {
JsonObject json = new JsonParser().parse(result).getAsJsonObject();
JsonArray erros = json.getAsJsonArray(ERROS);
ErrorMesage errorMesage = new Gson().fromJson(erros.get(0), ErrorMesage.class);
throw new MessageException(errorMesage);
}
return result;
}
public String params(Map<String, Object> params) {
StringBuilder sb = new StringBuilder();
if (params != null && params.size() > 0) {
Set<Map.Entry<String, Object>> entrySet = params.entrySet();
sb.append("?");
try {
for (Map.Entry<String, Object> entry : entrySet) {
Object val = entry.getValue();
if (null != val) {
sb.append(entry.getKey());
sb.append("=");
sb.append(URLEncoder.encode(val.toString(), "UTF-8"));
sb.append("&");
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
sb.deleteCharAt(sb.length() - 1);
}
System.out.println(sb.toString());
return sb.toString();
}
/**
* 一般的get请求 对于一般的请求我们希望给个url然后取的返回的String。
*
* @param url 请求路径
* @return 返回JSON字符串
* @throws IOException 异常
*/
public String get(String url) throws IOException, MessageException {
return get(url, null);
}
/**
* get请求
*
* @param url 请求路径
* @param params 请求参数
* @return 返回
* @throws IOException 异常
*/
public String get(String url, Map<String, Object> params) throws IOException, MessageException {
String paramstr = params(params);
Request request = new Request.Builder().url(url + paramstr).get()
.addHeader("content-type", "application/json").addHeader("Authorization", "Basic " + getAuthorization())
.build();
Call call = okHttpClient.newCall(request);
return isResult(call.execute().body().string());
}
/**
* 一般的post请求 对于一般的请求我们希望给个url和封装参数的Map然后取的返回的String。
*
* @param url 请求路径
* @param params 请求参数
* @return 返回结果
* @throws IOException 异常
* @author dexiang.jiang
*/
public String post(String url, Map<String, Object> params) throws IOException, MessageException {
MediaType mediaType = MediaType.parse("application/json");
String json = new Gson().toJson(params);
RequestBody body = RequestBody.create(mediaType, json);
Request request = new Request.Builder().url(url).post(body)
.addHeader("content-type", "application/json").addHeader("Authorization", "Basic " + authorization)
.build();
Call call = okHttpClient.newCall(request);
return isResult(call.execute().body().string());
}
public String getAuthorization() {
return authorization;
}
public void setAuthorization(String auth) {
authorization = auth;
}
}