1. 获取不通的RestTemplate
package com.iwhalecloud.res.resmaster.cost.config;public class RestTemplateFactory {public static RestTemplate buildDefaultTemplate() {final RequestConfig defaultRequestConfig = getRequestConfig(60000, 3000, 3000);HttpClientBuilder httpClientBuilderRetry = createCommonHttpClientBuilder().setDefaultRequestConfig(defaultRequestConfig);CloseableHttpClient hc = httpClientBuilderRetry.build();RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(hc));return restTemplate;}public static RestTemplate buildNoCookieTemplate() {RequestConfig defaultRequestConfig = getRequestConfig(60000, 3000, 3000);CloseableHttpClient hc = createCommonHttpClientBuilder().setDefaultRequestConfig(defaultRequestConfig).disableCookieManagement().build();RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(hc));return restTemplate;}public static RestTemplate buildNoRedirectTemplate() {final RequestConfig noRedirectRequestConfig = getRequestConfig(60000, 3000, 3000);HttpClientBuilder httpClientBuilderRetry = createCommonHttpClientBuilder().setRedirectStrategy(new RedirectStrategy() {@Overridepublic boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException {return false;}@Overridepublic HttpUriRequest getRedirect(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException {return null;}}).setDefaultRequestConfig(noRedirectRequestConfig);CloseableHttpClient hc = httpClientBuilderRetry.build();RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(hc));return restTemplate;}private static RequestConfig getRequestConfig(int socketTimeOut, int connectTimeout, int ConnectionRequestTimeout) {return RequestConfig.custom().setSocketTimeout(socketTimeOut).setConnectTimeout(connectTimeout).setConnectionRequestTimeout(ConnectionRequestTimeout).build();}private static HttpClientBuilder createCommonHttpClientBuilder() {final SocketConfig socketConfig = SocketConfig.custom().setSoKeepAlive(true).setSoReuseAddress(true).setSoTimeout(2000).build();return HttpClientBuilder.create().setDefaultSocketConfig(socketConfig).setMaxConnTotal(1000).setMaxConnPerRoute(1000).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);}
}
2. restTemplate 发送get请求
2.1 方式1
ResponseEntity<String> smapInfo = restTemplate.exchange("url地址", HttpMethod.GET, httpEntity, String.class);
2.2 方式2
- 需要使用URLEncoder.encode编码的get请求
ResponseEntity<String> info= restTemplate.getForEntity(new URI(getUrl() + "?a=" + smapId + "&b=" + scd+ "&sn=" + sn), String.class);
2.3 方式3
restTemplate.getForEntity("url地址", String.class);
3. restTemplate 发送post请求
MultipartFile multipartFile = new MockMultipartFile("file", // 参数名attachmentName, // 原始文件名contentType, // MIME 类型fileBytes);
// 1. 构建 MultiValueMap
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", amultipartFile.getResource());
// 2. 配置 RestTemplate
FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
formConverter.setCharset(StandardCharsets.UTF_8); // 解决中文乱码
restTemplate.getMessageConverters().add(formConverter);
// 3. 请求头设置
HttpHeaders headers = new HttpHeaders();
headers.add("Cookie", "34jewi8erwjd72her");
headers.setContentType(MediaType.MULTIPART_FORM_DATA);//发送请求
ResponseEntity<String> response = restTemplate.postForEntity("url地址", new HttpEntity(body, headers), String.class);
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("ab", "ab");
// 创建HTTP头部,并设置内容类型为Form-data
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 创建HTTP请求实体,包含请求体和头部信息
HttpEntity<Object> requestEntity = new HttpEntity<>(params, headers);
ResponseEntity<String> response = restTemplate.postForEntity("url地址", requestEntity, String.class);