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

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.aegis.common.faces.util.ErrorMesage;
import com.kiisoo.aegis.common.faces.util.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 okhttp3newbuild 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 urlString
*
* @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 urlMapString
*
* @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;
}
}