RestTemplate是Spring提供的用于访问Rest服务的客户端,
RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,
可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。
ClientHttpRequestFactory接口主要提供了两种实现方式
1、一种是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接。
2、一种方式是使用HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息。
引入以下Jar包,即可通过注解的方式直接使用
1、引入jar包
compile group: 'org.springframework.boot',name:'spring-boot-starter-web',version:'1.4.2.RELEASE'
2、配置restTemplate 初始化config,可配置相关参数
@Configuration
public class RestTemplateConfig {
@Bean(name="httpClient")
public CloseableHttpClient httpClient() {
return HttpClientBuilder.create().build();
}
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());
return restTemplate;
}
@Bean
public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
clientHttpRequestFactory.setHttpClient(httpClient());
return clientHttpRequestFactory;
}
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setThreadNamePrefix("poolScheduler");
scheduler.setPoolSize(50);
return scheduler;
}
}
第二种初始化方式,在启动类中直接new,不需要上面的RestTemplateConfig,使用默认参数
@SpringBootApplication
public class MainApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(MainApplication .class, args);
}
}
3、使用
@Autowired
private RestTemplate httpRestTemplate
1.1 POST请求方式
1.1.1单个参数post请求
·被调方:
@PostMapping("/modify")
public RespBody modify(@RequestParam("typeId")int typeId,@RequestParam("typeName")String typeName) {
try {
service.modify(typeId,typeName);
return RespBody.success();
}catch (Exception e) {
logger.error("出错", e);
return RespBody.fail(ErrorCode.ERROR);
}
}
调用方:
public RespBody modify(long typeId,String typeName) {
try {
MultiValueMap map = new LinkedMultiValueMap<>();
map.add("typeId",typeId);
map.add("typeName",typeName);
RespBody respBody = httpRestTemplate.postForObject(URL+ "/modify",map,RespBody.class);
return respBody;
} catch (Exception e) {
log.error("出错", e);
}
}
1.1.2参数为对象post的形式
被调方:
@PostMapping("save")
public RespBody save(@RequestBody(required = true) WeChatConfigArgs weChatConfigArgs){
try {
service.save(weChatConfigArgs);
return RespBody.success();
} catch (Exception e) {
e.printStackTrace();
return RespBody.fail();
}
}
调用方:
public RespBody save(WeChatConfigArgs weChatConfigArgs) {
try {
RespBody respBody = httpRestTemplate.postForObject( URL+ "/save",weChatConfigArgs,RespBody.class);
return respBody;
} catch (Exception e) {
log.error("保存公众微信配置失败", e);
return RespBody.fail();
}
}
1.2 GET请求方式
1.2.1 无参GET请求
调用方:
RespBody respBody = httpRestTemplate.getForObject(URL+ "/save",RespBody.class);
参考文章:https://www.cnblogs.com/duanxz/p/3510622.html