背景
搭建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