本文章使用OkHttpClient发送get请求携带Header参数,header里为鉴权的用户+密码
OkHttpClient返回json字符串转javaBean
import com.google.gson.Gson;
import com.xiaojukeji.mdata.framework.entry.rest.RestDataResponse;
import com.xiaojukeji.mdata.framework.error.CheckedException;
import com.xiaojukeji.mdata.framework.error.ExceptionMessage;
import okhttp3.ConnectionPool;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @Author test
* @Description
* @Date 2020/8/3
**/
@Component
public class RemoteProxy implements InitializingBean{
private static final Logger LOGGER = LoggerFactory.getLogger(RemoteProxy.class);
private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
@Value("${party3.integrity.alliance.username}") private String username;
@Value("${party3.integrity.alliance.password}") private String password;
@Value("${party3.integrity.alliance.path}") private String base_path_url;
private static String BASIC_AUTH_TOKEN;
/**
* 组装Header参数中的鉴权信息(账号+密码方式)
*/
@Override
public void afterPropertiesSet() throws Exception {
String auth = username + ":" + password;
byte[] encodedAuth = Base64.encodeBase64(
auth.getBytes(DEFAULT_CHARSET));
BASIC_AUTH_TOKEN = "Basic " + new String(encodedAuth);
}
/**
* 调用方法
*/
public boolean remote(String param){
RestDataResponse restDataResponse = queryHttpGetMethod(param);
return (Boolean)restDataResponse.getData();
}
/**
* get请求,组装url,放入鉴权header
* 返回值RestDataResponse为自定义javaBean,结构与返回值Json字符型保持一致
*/
private RestDataResponse queryHttpGetMethod(String param){
Request request = new Request.Builder()
.url(base_path_url + param)
.addHeader("Authorization", BASIC_AUTH_TOKEN).build();
// new client对象时注意配置的链接与超时时间,根据需要进行调整
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(3, TimeUnit.SECONDS)
.build();
try{
Response response = client.newCall(request).execute();
String body = response.body().string();
//json字符串转javaBean
Gson gson = new Gson();
RestDataResponse restDataResponse = gson.fromJson(body, RestDataResponse.class);
if(response.code() != 200 || Objects.isNull(restDataResponse)){
throw new CheckedException(ExceptionMessage.newInstance(400,
"invoke remote integrity alliance api error"),"");
}
if(restDataResponse.getMeta().getCode() != 0){
throw new CheckedException(ExceptionMessage.newInstance(restDataResponse.getMeta().getCode(),
"invoke remote integrity alliance api error,message:{}"),
restDataResponse.getMeta().getMessage());
}
return restDataResponse;
}catch (Exception e){
throw new CheckedException(ExceptionMessage.newInstance(400,
"invoke remote integrity alliance api error"),"");
}
}
}