RestTemplate的学习与使用
最近在开发过程中遇到使用接口传输数据,了解到到RestTemplate
1、 源码分析
public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {
public RestTemplate(ClientHttpRequestFactory requestFactory) {
this();
this.setRequestFactory(requestFactory);
}
}
public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, AsyncClientHttpRequestFactory {
private static final int DEFAULT_CHUNK_SIZE = 4096;
@Nullable
private Proxy proxy;
private boolean bufferRequestBody = true;
private int chunkSize = 4096;
private int connectTimeout = -1;
private int readTimeout = -1;
private boolean outputStreaming = true;
@Nullable
private AsyncListenableTaskExecutor taskExecutor;
}
2、 创建Util
public class ConnectionUtil {
public static RestTemplate getConnectionFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(5000);
factory.setReadTimeout(5000);
RestTemplate restTemplate = new RestTemplate(factory);
List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
httpMessageConverters.stream().forEach(httpMessageConverter -> {
if(httpMessageConverter instanceof StringHttpMessageConverter){
StringHttpMessageConverter messageConverter = (StringHttpMessageConverter) httpMessageConverter;
messageConverter.setDefaultCharset(Charset.forName("UTF-8"));
}
});
return restTemplate;
}
}
3、post请求
Map<String, Object> param = new HashMap<>();
param.put("username", username);
param.put("password", password);
String url = loginOn_URL;
try {
RestTemplate restTemplate = ConnectionUtil.getConnectionFactory();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Connection", "Keep-Alive");
headers.add("Authorization", "Bearer " + Token);
HttpEntity<Map<String, Object>> request = new HttpEntity(param, headers);
String result = restTemplate.postForObject(url, request, String.class);
JSONObject resultJo = JSONObject.parseObject(result);
String xxx = resultJo.getString("xxx")
} catch (Exception e) {
log.error("post error");
throw new RuntimeException("post error");
}
4、get请求
Map<String, Object> param = new HashMap<>();
param.put("ProviderID", ProviderID);
String url = getStatus_URL;
JSONObject resultJo = new JSONObject();
try {
RestTemplate restTemplate = ConnectionUtil.getConnectionFactory();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "Bearer " + Token);
headers.add("Connection", "Keep-Alive");
HttpEntity<Map<String, Object>> request = new HttpEntity(param, headers);
ResponseEntity<String> resEntity = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
resultJo = JSON.parseObject(resEntity.getBody());
log.info("get result=" + resultJo);
} catch (Exception e) {
log.error("get error");
throw new RuntimeException("get error");
}
Map<String, Object> param = new HashMap<>();
long timeMillis = System.currentTimeMillis();
param.put("ProviderID", ProviderID);
param.put("Date", timeMillis);
String url = getStaticMessage + param.get("ProviderID") + "&Date=" + param.get("Date");
JSONObject resultJo = new JSONObject();
try {
RestTemplate restTemplate = ConnectionUtil.getConnectionFactory();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + Token);
HttpEntity<String> request = new HttpEntity(null, headers);
ResponseEntity<String> resEntity = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
resultJo = JSONObject.parseObject(resEntity.getBody());
System.out.println("the vehicleInfo result=" + resultJo);
} catch (Exception e) {
log.error("the vehicleInfo error");
throw new RuntimeException("the vehicleInfo error");
}
5、文件内容转换成base64 的转换
private String changeBase64(String url) {
url = "D:/record saved/alarmpic/9860223/2021-12-31/9860223_082001_00-01.jpg";
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(url);
data = new byte[in.available()];
in.read(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("the byte length=" + data.length);
String code = Base64.getEncoder().encodeToString(data);
return code;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)