小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
背景
搭建SpringBoot项目框架,将要集成远程调用统一解决方案,来对其他服务的接口进行访问。
比如Http接口、WebService接口等等的其他服务对外暴露的接口。
针对SpringBoot环境集成RestTemplate组件,并且生成出相关的工具类,进而使开发效率有更好的提升。
实现的具体部署
还是一样,要先在pom文件引入相应的jar包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
不要太过好奇为什么不引入RestTemplate的jar包,因为starter-web依赖就已经默认引入了相应包了。
引入这个包之后,我们就可以在相应的类中进行属性装配了,如下代码:
@Autowired
private RestTemplate restTemplate;
通过这种方式就可以调用相关的方法了,当然这里也可以直接new一个RestTemplate对象也是可以的。
扩展
集成RestTemplate,不只是引入一个jar包就可以了,更多的是根据项目的实际情况不同,去做出一些自定义调整,我这里是引入了一个自动配置类,我把代码贴出来,大家可以进行一个参考。
@Configuration
public class RestTemplateAutoConfiguration {
/**
* 连接超时时间
*/
@Value("${rest.connection.timeout}")
private Integer connectionTimeout;
/**
* 信息读取超时时间
*/
@Value("${rest.read.timeout}")
private Integer readTimeout;
/**
* 声明RestTemplate服务
* @return RestTemplate
*/
@Bean
public RestTemplate registerTemplate(ClientHttpRequestFactory simileClientHttpRequestFactory) {
RestTemplate restTemplate = new RestTemplate();
//配置自定义的message转换器
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
messageConverters.add(new RestTemplateHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);
//配置自定义的interceptor拦截器
List<ClientHttpRequestInterceptor> interceptors= new ArrayList<>();
interceptors.add(new HeadClientHttpRequestInterceptor());
interceptors.add(new TrackLogClientHttpRequestInterceptor());
restTemplate.setInterceptors(interceptors);
//配置自定义的异常处理
restTemplate.setErrorHandler(new RestTemplateExceptionHandle());
restTemplate.setRequestFactory(simileClientHttpRequestFactory);
return restTemplate;
}
/**
* 初始化请求工厂
* @return SimpleClientHttpRequestFactory
*/
@Bean
public SimpleClientHttpRequestFactory getFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(connectionTimeout);
factory.setReadTimeout(readTimeout);
return factory;
}
/**
* 数据转换器
*/
static class RestTemplateHttpMessageConverter extends MappingJackson2HttpMessageConverter {
public RestTemplateHttpMessageConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML); //加入text/html类型的支持
setSupportedMediaTypes(mediaTypes);// tag6
}
}
}
当然了,在application.yml中也要对其进行参数的配置,如下代码所示。
rest:
connection:
timeout: 10000
read:
timeout: 20000