<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.isyscore.app.env.watcher.exception.BusinessException;
import com.isyscore.isc.neo.util.ObjectUtil;
import lombok.Data;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author shizi
* @since 2020/11/21 11:28 AM
*/
@Slf4j
@UtilityClass
public class HttpHelper {
private final String LOG_PRE = "[http-helper] ";
private final String GET = "GET";
private final String HEAD = "HEAD";
private final String POST = "POST";
private final String PUT = "PUT";
private final String PATCH = "PATCH";
private final String DELETE = "DELETE";
// okhttp暂时不支持
private final String OPTION = "OPTION";
// okhttp暂时不支持
private final String TRACE = "TRACE";
private final OkHttpClient client;
static {
Integer TIME_OUT = 30 * 1000;
client = new OkHttpClient.Builder().connectTimeout(TIME_OUT, TimeUnit.MILLISECONDS).readTimeout(TIME_OUT, TimeUnit.MILLISECONDS).build();
Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.INFO);
}
// ------------------ get ------------------
public <T> T get(Class<T> responseClass, String url) {
return doRequestForObject(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
}
public <T> List<T> getList(Class<T> responseClass, String url) {
return doRequestForList(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
}
public <T> T getOfStandard(Class<T> responseClass, String url) {
return doRequestForObjectOfStandard(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
}
public <T> List<T> getListOfStandard(Class<T> responseClass, String url) {
return doRequestForListOfStandard(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
}
public <T> T get(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForObject(responseClass, GET, url, Headers.of(), parameters, true, null);
}
public <T> List<T> getList(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForList(responseClass, GET, url, Headers.of(), parameters, true, null);
}
public <T> T getOfStandard(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForObjectOfStandard(responseClass, GET, url, Headers.of(), parameters, true, null);
}
public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForListOfStandard(responseClass, GET, url, Headers.of(), parameters, true, null);
}
public <T> T get(Class<T> responseClass, String url, Headers headers) {
return doRequestForObject(responseClass, GET, url, headers, Parameters.of(), true, null);
}
public <T> List<T> getList(Class<T> responseClass, String url, Headers headers) {
return doRequestForList(responseClass, GET, url, headers, Parameters.of(), true, null);
}
public <T> T getOfStandard(Class<T> responseClass, String url, Headers headers) {
return doRequestForObjectOfStandard(responseClass, GET, url, headers, Parameters.of(), true, null);
}
public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Headers headers) {
return doRequestForListOfStandard(responseClass, GET, url, headers, Parameters.of(), true, null);
}
public <T> T get(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObject(responseClass, GET, url, headers, parameters, true, null);
}
public <T> List<T> getList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForList(responseClass, GET, url, headers, parameters, true, null);
}
public <T> T getOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObjectOfStandard(responseClass, GET, url, headers, parameters, true, null);
}
public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForListOfStandard(responseClass, GET, url, headers, parameters, true, null);
}
public void get(String url) {
doRequestForObject(null, GET, url, Headers.of(), Parameters.of(), true, null);
}
public void getList(String url) {
doRequestForList(null, GET, url, Headers.of(), Parameters.of(), true, null);
}
public void getOfStandard(String url) {
doRequestForObjectOfStandard(null, GET, url, Headers.of(), Parameters.of(), true, null);
}
public void getListOfStandard(String url) {
doRequestForListOfStandard(null, GET, url, Headers.of(), Parameters.of(), true, null);
}
public void get(String url, Parameters parameters) {
doRequestForObject(null, GET, url, Headers.of(), parameters, true, null);
}
public void getList(String url, Parameters parameters) {
doRequestForList(null, GET, url, Headers.of(), parameters, true, null);
}
public void getOfStandard(String url, Parameters parameters) {
doRequestForObjectOfStandard(null, GET, url, Headers.of(), parameters, true, null);
}
public void getListOfStandard(String url, Parameters parameters) {
doRequestForListOfStandard(null, GET, url, Headers.of(), parameters, true, null);
}
public void get(String url, Headers headers) {
doRequestForObject(null, GET, url, headers, Parameters.of(), true, null);
}
public void getList(String url, Headers headers) {
doRequestForList(null, GET, url, headers, Parameters.of(), true, null);
}
public void getOfStandard(String url, Headers headers) {
doRequestForObjectOfStandard(null, GET, url, headers, Parameters.of(), true, null);
}
public void getListOfStandard(String url, Headers headers) {
doRequestForListOfStandard(null, GET, url, headers, Parameters.of(), true, null);
}
public void get(String url, Headers headers, Parameters parameters) {
doRequestForObject(null, GET, url, headers, parameters, true, null);
}
public void getList(String url, Headers headers, Parameters parameters) {
doRequestForList(null, GET, url, headers, parameters, true, null);
}
public void getOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForObjectOfStandard(null, GET, url, headers, parameters, true, null);
}
public void getListOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForListOfStandard(null, GET, url, headers, parameters, true, null);
}
// ------------------ head ------------------
public void head(String url) {
doRequestForObject(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
}
public void headList(String url) {
doRequestForList(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
}
public void headOfStandard(String url) {
doRequestForObjectOfStandard(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
}
public void headListOfStandard(String url) {
doRequestForListOfStandard(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
}
public void head(String url, Parameters parameters) {
doRequestForObject(null, HEAD, url, Headers.of(), parameters, true, null);
}
public void headList(String url, Parameters parameters) {
doRequestForList(null, HEAD, url, Headers.of(), parameters, true, null);
}
public void headOfStandard(String url, Parameters parameters) {
doRequestForObjectOfStandard(null, HEAD, url, Headers.of(), parameters, true, null);
}
public void headListOfStandard(String url, Parameters parameters) {
doRequestForListOfStandard(null, HEAD, url, Headers.of(), parameters, true, null);
}
public void head(String url, Headers headers) {
doRequestForObject(null, HEAD, url, headers, Parameters.of(), true, null);
}
public void headList(String url, Headers headers) {
doRequestForList(null, HEAD, url, headers, Parameters.of(), true, null);
}
public void headOfStandard(String url, Headers headers) {
doRequestForObjectOfStandard(null, HEAD, url, headers, Parameters.of(), true, null);
}
public void headListOfStandard(String url, Headers headers) {
doRequestForListOfStandard(null, HEAD, url, headers, Parameters.of(), true, null);
}
public void head(String url, Headers headers, Parameters parameters) {
doRequestForObject(null, HEAD, url, headers, parameters, true, null);
}
public void headList(String url, Headers headers, Parameters parameters) {
doRequestForList(null, HEAD, url, headers, parameters, true, null);
}
public void headOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForObjectOfStandard(null, HEAD, url, headers, parameters, true, null);
}
public void headListOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForListOfStandard(null, HEAD, url, headers, parameters, true, null);
}
// ------------------ post ------------------
public void post(String url, Object body) {
doRequestForObject(null, POST, url, Headers.of(), Parameters.of(), false, body);
}
public void postOfStandard(String url, Object body) {
doRequestForObjectOfStandard(null, POST, url, Headers.of(), Parameters.of(), false, body);
}
public void post(String url, Parameters parameters, Object body) {
doRequestForObject(null, POST, url, Headers.of(), parameters, false, body);
}
public void postOfStandard(String url, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, POST, url, Headers.of(), parameters, false, body);
}
public void post(String url, Headers headers, Object body) {
doRequestForObject(null, POST, url, headers, Parameters.of(), false, body);
}
public void postOfStandard(String url, Headers headers, Object body) {
doRequestForObjectOfStandard(null, POST, url, headers, Parameters.of(), false, body);
}
public void post(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObject(null, POST, url, headers, parameters, false, body);
}
public void postOfStandard(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, POST, url, headers, parameters, false, body);
}
public <T> T post(Class<T> responseClass, String url, Object body) {
return doRequestForObject(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> postList(Class<T> responseClass, String url, Object body) {
return doRequestForList(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T postOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForObjectOfStandard(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForListOfStandard(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T post(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObject(responseClass, POST, url, Headers.of(), parameters, false, body);
}
public <T> List<T> postList(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForList(responseClass, POST, url, Headers.of(), parameters, false, body);
}
public <T> T postOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, POST, url, Headers.of(), parameters, false, body);
}
public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, POST, url, Headers.of(), parameters, false, body);
}
public <T> T post(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObject(responseClass, POST, url, headers, Parameters.of(), false, body);
}
public <T> List<T> postList(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForList(responseClass, POST, url, headers, Parameters.of(), false, body);
}
public <T> T postOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObjectOfStandard(responseClass, POST, url, headers, Parameters.of(), false, body);
}
public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForListOfStandard(responseClass, POST, url, headers, Parameters.of(), false, body);
}
public <T> T postFormData(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestFormDataForObject(responseClass, POST, url, headers, parameters, false, body);
}
public <T> T post(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObject(responseClass, POST, url, headers, parameters, false, body);
}
public <T> List<T> postList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForList(responseClass, POST, url, headers, parameters, false, body);
}
public <T> T postOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, POST, url, headers, parameters, false, body);
}
public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, POST, url, headers, parameters, false, body);
}
// ------------------ put ------------------
public void put(String url) {
doRequestForObject(null, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public void putOfStandard(String url) {
doRequestForObjectOfStandard(null, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public void put(String url, Headers headers, Parameters parameters) {
doRequestForObject(null, PUT, url, headers, parameters, false, null);
}
public void putOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForObjectOfStandard(null, PUT, url, headers, parameters, false, null);
}
public <T> T put(Class<T> responseClass, String url) {
return doRequestForObject(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public <T> List<T> putList(Class<T> responseClass, String url) {
return doRequestForList(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public <T> T putOfStandard(Class<T> responseClass, String url) {
return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url) {
return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
}
public <T> T put(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObject(responseClass, PUT, url, headers, parameters, false, null);
}
public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForList(responseClass, PUT, url, headers, parameters, false, null);
}
public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObjectOfStandard(responseClass, PUT, url, headers, parameters, false, null);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForListOfStandard(responseClass, PUT, url, headers, parameters, false, null);
}
public void put(String url, Object body) {
doRequestForObject(null, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public void putOfStandard(String url, Object body) {
doRequestForObjectOfStandard(null, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public void put(String url, Parameters parameters, Object body) {
doRequestForObject(null, PUT, url, Headers.of(), parameters, false, body);
}
public void putOfStandard(String url, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, PUT, url, Headers.of(), parameters, false, body);
}
public void put(String url, Headers headers, Object body) {
doRequestForObject(null, PUT, url, headers, Parameters.of(), false, body);
}
public void putOfStandard(String url, Headers headers, Object body) {
doRequestForObjectOfStandard(null, PUT, url, headers, Parameters.of(), false, body);
}
public void put(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObject(null, PUT, url, headers, parameters, false, body);
}
public void putOfStandard(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, PUT, url, headers, parameters, false, body);
}
public <T> T put(Class<T> responseClass, String url, Object body) {
return doRequestForObject(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> putList(Class<T> responseClass, String url, Object body) {
return doRequestForList(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T putOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T put(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObject(responseClass, PUT, url, Headers.of(), parameters, false, body);
}
public <T> List<T> putList(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForList(responseClass, PUT, url, Headers.of(), parameters, false, body);
}
public <T> T putOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), parameters, false, body);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), parameters, false, body);
}
public <T> T put(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObject(responseClass, PUT, url, headers, Parameters.of(), false, body);
}
public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForList(responseClass, PUT, url, headers, Parameters.of(), false, body);
}
public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObjectOfStandard(responseClass, PUT, url, headers, Parameters.of(), false, body);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForListOfStandard(responseClass, PUT, url, headers, Parameters.of(), false, body);
}
public <T> T put(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObject(responseClass, PUT, url, headers, parameters, false, body);
}
public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForList(responseClass, PUT, url, headers, parameters, false, body);
}
public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, PUT, url, headers, parameters, false, body);
}
public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, PUT, url, headers, parameters, false, body);
}
// ------------------ delete ------------------
public <T> T delete(Class<T> responseClass, String url) {
return doRequestForObject(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public <T> List<T> deleteList(Class<T> responseClass, String url) {
return doRequestForList(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url) {
return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public <T> T delete(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForObject(responseClass, DELETE, url, Headers.of(), parameters, true, null);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForList(responseClass, DELETE, url, Headers.of(), parameters, true, null);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, null);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Parameters parameters) {
return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, null);
}
public <T> T delete(Class<T> responseClass, String url, Headers headers) {
return doRequestForObject(responseClass, DELETE, url, headers, Parameters.of(), true, null);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers) {
return doRequestForList(responseClass, DELETE, url, headers, Parameters.of(), true, null);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, null);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers) {
return doRequestForListOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, null);
}
public <T> T delete(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObject(responseClass, DELETE, url, headers, parameters, true, null);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForList(responseClass, DELETE, url, headers, parameters, true, null);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, parameters, true, null);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
return doRequestForListOfStandard(responseClass, DELETE, url, headers, parameters, true, null);
}
public void delete(String url) {
doRequestForObject(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public void deleteList(String url) {
doRequestForList(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public void deleteOfStandard(String url) {
doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public void deleteListOfStandard(String url) {
doRequestForListOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
}
public void delete(String url, Parameters parameters) {
doRequestForObject(null, DELETE, url, Headers.of(), parameters, true, null);
}
public void deleteList(String url, Parameters parameters) {
doRequestForList(null, DELETE, url, Headers.of(), parameters, true, null);
}
public void deleteOfStandard(String url, Parameters parameters) {
doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), parameters, true, null);
}
public void deleteListOfStandard(String url, Parameters parameters) {
doRequestForListOfStandard(null, DELETE, url, Headers.of(), parameters, true, null);
}
public void delete(String url, Headers headers) {
doRequestForObject(null, DELETE, url, headers, Parameters.of(), true, null);
}
public void deleteList(String url, Headers headers) {
doRequestForList(null, DELETE, url, headers, Parameters.of(), true, null);
}
public void deleteOfStandard(String url, Headers headers) {
doRequestForObjectOfStandard(null, DELETE, url, headers, Parameters.of(), true, null);
}
public void deleteListOfStandard(String url, Headers headers) {
doRequestForListOfStandard(null, DELETE, url, headers, Parameters.of(), true, null);
}
public void delete(String url, Headers headers, Parameters parameters) {
doRequestForObject(null, DELETE, url, headers, parameters, true, null);
}
public void deleteList(String url, Headers headers, Parameters parameters) {
doRequestForList(null, DELETE, url, headers, parameters, true, null);
}
public void deleteOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForObjectOfStandard(null, DELETE, url, headers, parameters, true, null);
}
public void deleteListOfStandard(String url, Headers headers, Parameters parameters) {
doRequestForListOfStandard(null, DELETE, url, headers, parameters, true, null);
}
public void delete(String url, Object body) {
doRequestForObject(null, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public void deleteOfStandard(String url, Object body) {
doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public void delete(String url, Parameters parameters, Object body) {
doRequestForObject(null, DELETE, url, Headers.of(), parameters, true, body);
}
public void deleteOfStandard(String url, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), parameters, true, body);
}
public void delete(String url, Headers headers, Object body) {
doRequestForObject(null, DELETE, url, headers, Parameters.of(), true, body);
}
public void deleteOfStandard(String url, Headers headers, Object body) {
doRequestForObjectOfStandard(null, DELETE, url, headers, Parameters.of(), true, body);
}
public void delete(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObject(null, DELETE, url, headers, parameters, true, body);
}
public void deleteOfStandard(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, DELETE, url, headers, parameters, true, body);
}
public <T> T delete(Class<T> responseClass, String url, Object body) {
return doRequestForObject(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Object body) {
return doRequestForList(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
}
public <T> T delete(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObject(responseClass, DELETE, url, Headers.of(), parameters, true, body);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForList(responseClass, DELETE, url, Headers.of(), parameters, true, body);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, body);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, body);
}
public <T> T delete(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObject(responseClass, DELETE, url, headers, Parameters.of(), true, body);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForList(responseClass, DELETE, url, headers, Parameters.of(), true, body);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, body);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForListOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, body);
}
public <T> T delete(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObject(responseClass, DELETE, url, headers, parameters, true, body);
}
public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForList(responseClass, DELETE, url, headers, parameters, true, body);
}
public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, parameters, true, body);
}
public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, DELETE, url, headers, parameters, true, body);
}
// ------------------ patch ------------------
public void patch(String url, Object body) {
doRequestForObject(null, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public void patchOfStandard(String url, Object body) {
doRequestForObjectOfStandard(null, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public void patch(String url, Parameters parameters, Object body) {
doRequestForObject(null, PATCH, url, Headers.of(), parameters, false, body);
}
public void patchOfStandard(String url, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, PATCH, url, Headers.of(), parameters, false, body);
}
public void patch(String url, Headers headers, Object body) {
doRequestForObject(null, PATCH, url, headers, Parameters.of(), false, body);
}
public void patchOfStandard(String url, Headers headers, Object body) {
doRequestForObjectOfStandard(null, PATCH, url, headers, Parameters.of(), false, body);
}
public void patch(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObject(null, PATCH, url, headers, parameters, false, body);
}
public void patchOfStandard(String url, Headers headers, Parameters parameters, Object body) {
doRequestForObjectOfStandard(null, PATCH, url, headers, parameters, false, body);
}
public <T> T patch(Class<T> responseClass, String url, Object body) {
return doRequestForObject(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> patchList(Class<T> responseClass, String url, Object body) {
return doRequestForList(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T patchOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForObjectOfStandard(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Object body) {
return doRequestForListOfStandard(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
}
public <T> T patch(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObject(responseClass, PATCH, url, Headers.of(), parameters, false, body);
}
public <T> List<T> patchList(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForList(responseClass, PATCH, url, Headers.of(), parameters, false, body);
}
public <T> T patchOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, PATCH, url, Headers.of(), parameters, false, body);
}
public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, PATCH, url, Headers.of(), parameters, false, body);
}
public <T> T patch(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObject(responseClass, PATCH, url, headers, Parameters.of(), false, body);
}
public <T> List<T> patchList(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForList(responseClass, PATCH, url, headers, Parameters.of(), false, body);
}
public <T> T patchOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForObjectOfStandard(responseClass, PATCH, url, headers, Parameters.of(), false, body);
}
public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
return doRequestForListOfStandard(responseClass, PATCH, url, headers, Parameters.of(), false, body);
}
public <T> T patch(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObject(responseClass, PATCH, url, headers, parameters, false, body);
}
public <T> List<T> patchList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForList(responseClass, PATCH, url, headers, parameters, false, body);
}
public <T> T patchOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForObjectOfStandard(responseClass, PATCH, url, headers, parameters, false, body);
}
public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
return doRequestForListOfStandard(responseClass, PATCH, url, headers, parameters, false, body);
}
// ------------------ options ------------------
// 该协议okhttp暂时不支持
// ------------------ trace ------------------
// 该协议okhttp暂时不支持
private <T> T doRequestForObject(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
try (Response response = call(request, url)) {
try (ResponseBody responseBody = response.body()) {
if (null == responseBody) {
return null;
}
return parseObject(responseClass, url, responseBody);
}
}
}
private <T> T doRequestFormDataForObject(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
Request request = new Request.Builder().method(httpMethod, getRequestBodyFormData(body)).headers(headers).url(getBuilder(url, parameters).build()).build();
try (Response response = call(request, url)) {
try (ResponseBody responseBody = response.body()) {
if (null == responseBody) {
return null;
}
return parseObject(responseClass, url, responseBody);
}
}
}
private <T> List<T> doRequestForList(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
try (Response response = call(request, url)) {
try (ResponseBody responseBody = response.body()) {
if (null == responseBody) {
return null;
}
return parseList(responseClass, url, responseBody);
}
}
}
private <T> T doRequestForObjectOfStandard(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
try (Response response = call(request, url)) {
try (ResponseBody responseBody = response.body()) {
if (null == responseBody) {
return null;
}
return parseObjectOfStandard(responseClass, url, responseBody);
}
}
}
private <T> List<T> doRequestForListOfStandard(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
try (Response response = call(request, url)) {
try (ResponseBody responseBody = response.body()) {
if (null == responseBody) {
return null;
}
return parseListOfStandard(responseClass, url, responseBody);
}
}
}
private HttpUrl.Builder getBuilder(String url, Parameters parameters) {
HttpUrl.Builder httpBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
parameters.parameterMap.forEach(httpBuilder::addQueryParameter);
return httpBuilder;
}
private RequestBody getRequestBody(Boolean allowNull, Object body) {
if (null == body) {
if (allowNull) {
return null;
}
return RequestBody.create(MediaType.parse("application/json"), JSON.toJSONString(new HashMap<>()));
}
return RequestBody.create(MediaType.parse("application/json"), JSON.toJSONString(body));
}
private RequestBody getRequestBodyFormData(Object body) {
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (Field declaredField : body.getClass().getDeclaredFields()) {
declaredField.setAccessible(true);
Class<?> fieldCls = declaredField.getType();
if (File.class.isAssignableFrom(fieldCls)) {
try {
File fieldFileData = (File) declaredField.get(body);
if (null == fieldFileData) {
continue;
}
String extension = FileUtil.extension(fieldFileData.getName());
if (StringUtils.isEmpty(extension)) {
continue;
}
MediaType mediaType = MediaType.parse(extension);
if (null == mediaType) {
mediaType = MediaType.parse("multipart/form-data");
}
builder.addFormDataPart(declaredField.getName(), fieldFileData.getName(), RequestBody.create(mediaType, fieldFileData));
} catch (IllegalAccessException e) {
log.warn("读取文件部分【{}】异常", declaredField.getName(), e);
}
} else {
try {
String fieldStr = ObjectUtil.toStr(declaredField.get(body));
if (null == fieldStr) {
continue;
}
builder.addFormDataPart(declaredField.getName(), fieldStr);
} catch (IllegalAccessException e) {
log.warn("获取属性【{}】异常", declaredField.getName(), e);
}
}
}
return builder.build();
}
public Response call(Request request, String url) {
Response response = null;
try {
response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new RuntimeException(response.code() + ", url=" + url + ", code=" + response.code());
}
return response;
} catch (Throwable e) {
if (null != response) {
log.error(LOG_PRE + "请求异常,url={}, code={}, request={}", url, response.code(), request);
response.close();
} else {
log.error(LOG_PRE + "请求异常,request={}", request);
}
throw new RuntimeException(e.getMessage(), e);
}
}
public <T> T parseObject(Class<T> tClass, String url, ResponseBody responseBody) {
try {
if (null == tClass) {
return null;
}
return (T) ObjectUtils.cast(tClass, responseBody.string());
} catch (IOException e) {
log.error(LOG_PRE + "请求异常,url={}", url, e);
throw new RuntimeException("请求异常");
}
}
private <T> List<T> parseList(Class<T> tClass, String url, ResponseBody responseBody) {
try {
if (null == tClass) {
return null;
}
return JSON.parseArray(responseBody.string(), tClass);
} catch (IOException e) {
log.error(LOG_PRE + "请求异常,url=" + url, e);
throw new RuntimeException("请求异常");
}
}
private <T> T parseObjectOfStandard(Class<T> tClass, String url, ResponseBody responseBody) {
try {
StandardResponse<?> response = JSONObject.parseObject(responseBody.bytes(), StandardResponse.class);
if (response.isSuccess()) {
if (null == tClass) {
return null;
}
return (T) ObjectUtils.cast(tClass, response.getData());
} else {
log.error("异常返回, code={}, message={}", response.getCode(), response.getMessage());
throw new BusinessException(Integer.valueOf(String.valueOf(response.getCode())), response.getMessage());
}
} catch (IOException e) {
log.error("请求异常,url=" + url, e);
throw new RuntimeException("请求异常");
}
}
private <T> List<T> parseListOfStandard(Class<T> tClass, String url, ResponseBody responseBody) {
try {
if (null == tClass) {
return null;
}
StandardResponse<?> response = JSONObject.parseObject(responseBody.bytes(), StandardResponse.class);
if (response.isSuccess()) {
return JSON.parseArray(JSON.toJSONString(response.getData()), tClass);
} else {
log.error("异常返回, code={}, message={}", response.getCode(), response.getMessage());
throw new BusinessException(Integer.valueOf(String.valueOf(response.getCode())), response.getMessage());
}
} catch (IOException e) {
log.error("请求异常,url=" + url, e);
throw new RuntimeException("请求异常");
}
}
@Data
public class StandardResponse<T> implements Serializable {
private Object code;
private String message;
private T data;
public boolean isSuccess() {
if (null == code) {
return false;
} else if (code instanceof String) {
return "success".equals(code);
} else if (code instanceof Integer) {
return Integer.valueOf(0).equals(code);
}
return false;
}
}
/**
* 参数的kv类型
*/
public static class Parameters {
private final Map<String, String> parameterMap = new ConcurrentHashMap<>();
private Parameters() {}
public static Boolean isUnEmpty(Parameters parameters) {
return !isEmpty(parameters);
}
public static Boolean isEmpty(Parameters parameters) {
if (null == parameters) {
return true;
}
return parameters.toMap().isEmpty();
}
public static Parameters of(String... kvs) {
if (kvs.length % 2 != 0) {
log.error(LOG_PRE + "Parameters.of的参数需要是key-value-key-value...这种格式");
return new Parameters();
}
Parameters parameters = new Parameters();
for (int i = 0; i < kvs.length; i += 2) {
if (null == kvs[i]) {
log.error(LOG_PRE + "map的key不可以为null");
return parameters;
}
if(null == kvs[i + 1]) {
log.error(LOG_PRE + "map的value不可以为null");
return parameters;
}
parameters.toMap().put(kvs[i], kvs[i + 1]);
}
return parameters;
}
public void put(String key, String value) {
parameterMap.put(key, value);
}
public Map<String, String> toMap() {
return parameterMap;
}
}
}