springBoot1.4版本之前,springboot会自动装配一个RestTemplate的Bean,1.4之后需要自己声明一个RestTemplate。通过RestTemplateBuilder来构建。
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
RestTemplate普通构造
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(150000); // ms
factory.setConnectTimeout(150000); // ms
return factory;
}
}
RestTemplate设置支持http和https协议
@Configuration
public class BeanConfiguration {
@Bean
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(null, new TrustAllStrategy())
.build();
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslContext,
sslContext.getDefaultSSLParameters().getProtocols(),
null,
NoopHostnameVerifier.INSTANCE);
Registry<ConnectionSocketFactory> registry = RegistryBuilder
.<ConnectionSocketFactory>create()
.register("http", new PlainConnectionSocketFactory())
.register("https", sslConnectionSocketFactory)
.build();
PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry);
CloseableHttpClient httpClient
= HttpClients.custom()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSSLSocketFactory(sslConnectionSocketFactory)
.setConnectionManager(manager)
.setConnectionManagerShared(true)
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
requestFactory.setConnectTimeout((int) Duration.ofSeconds(30).toMillis());
RestTemplate restTemplate = new RestTemplate(requestFactory);
//加入对text/html的支持
List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof MappingJackson2HttpMessageConverter) {
try {
List<MediaType> mediaTypeList = new ArrayList<>(converter.getSupportedMediaTypes());
mediaTypeList.add(MediaType.TEXT_HTML);
((MappingJackson2HttpMessageConverter) converter).setSupportedMediaTypes(mediaTypeList);
} catch (Exception e) {
e.printStackTrace();
}
}
if (converter instanceof StringHttpMessageConverter) {
try {
((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return restTemplate;
}
}
其他方式可参考:Springboot之restTemplate配置及使用_resttemplate 注入_L-960的博客-CSDN博客
RestTemplate使用JSON发送Post请求_resttemplate发送post请求json_梦想画家的博客-CSDN博客
Java RestTemplate post请求传递参数_postforentity和postforobject区别_chnjg的博客-CSDN博客
Springboot RestTemplate同时支持发送HTTP及HTTPS请求_resttemplate需要引入什么包_星星@点点的博客-CSDN博客
java实用型-高并发下RestTemplate的正确使用_resttemplate高并发_我们都爱松松吧的博客-CSDN博客