import okhttp3.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* Rest请求工具类
*/
@Component
public final class RestUtils {
@Value("${request.appSecret}")
private String token;
@Value("${request.application.appId}")
private String appId;
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class);
private OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.build();;
public String get(String restUrl) throws IOException {
Request request = createRequest(restUrl).build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
}
}
public String get(final String restUrl, String parameters) throws IOException {
if (StringUtils.isNotEmpty(parameters)) {
return get(restUrl + "?" + parameters);
}
return get(restUrl);
}
public String post(String restUrl, String json, Map<String, String> headers) {
RequestBody body = RequestBody.create(JSON, json);
Request.Builder requestBuilder = createRequest(restUrl);
for (Map.Entry<String, String> entry : headers.entrySet()) {
requestBuilder.addHeader(entry.getKey(), entry.getValue());
}
Request request = requestBuilder.post(body).build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
} catch (Exception e) {
LOGGER.error("post error:", e);
}
return "";
}
private Request.Builder createRequest(String url) {
String tokenAuth = null;
try {
tokenAuth = getToken();
} catch (Exception e) {
LOGGER.error("get token error, encoding error", e);
}
return new Request.Builder().url(url)
.header("Content-Type", "application/json;charset=UTF-8")
.addHeader("X-HW-APPKEY", "czyImZk1LvPcP+m+BgmyzA==")
.addHeader("X-HW-ID", "app_000000035085");
}
private String getToken() {
String tokenRut = null;
try {
String environmentRut = RegistryUtilService.findDictionaryValue("supplybisde.online_type");
String credentialRut = token;
String appIdRut = appId;
// 通过SOA管控平台的API生成动态Token
// 设置SAO管控平台环境,只有uat和pro环境
if (!"pro".equals(environmentRut)) {
LOGGER.info("getToken Method environmentRut");
SoaAppTokenClientUtil.setEnvironment("uat");
} else {
SoaAppTokenClientUtil.setEnvironment(environmentRut);
}
// 将AppId和静态Token传入API,获取动态Token值
SoaAppTokenClientUtil.initial(appIdRut, credentialRut);
try {
tokenRut = SoaAppTokenClientUtil.getBasicTokenByAppCredential();
} catch (Exception ex) {
// junit 处理
String url = ApplicationConfigProperties.getContextProperty("umws4login.url");
AuthenticationDelegate.initRequestURL(url);
tokenRut = SoaAppTokenClientUtil.getBasicTokenByAppCredential();
}
} catch (Exception ex) {
LOGGER.error("get token error:", ex);
}
return tokenRut;
}
}