日常开发中,调用远程的rest服务是很常见的,比如微服务情况下的rest服务调用,又或者是调用第三方服务。微服务下的调用有服务注册与发现机制来调用,也可以使用RestTemplate
方式来调用;而要是第三方服务,那么一般情况下是通过HTTP请求来调用。
接下来就看说一下在springboot项目中,用RestTemplate
来调用远程rest服务,包括第三方服务。
首先我们的web项目中一般会有web依赖,此依赖中已有RestTemplate
类,如下所示:
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
|
其次假设有这样一个rest服务接口,提供一个简单的返回(服务的启动地址为“http://127.0.0.1:8080”),如下所示:
1 2 3 4 5 6 7 8 9 10 11
| @RestController @Slf4j public class RestServerController {
@GetMapping("/rest/{name}") public String rest(@PathVariable String name) { log.info("request -> {}", name); return "Hello, " + name + " !"; }
}
|
那么我们要想调用这个服务,只需要用RestTemplate
实例的方法即可成功调用。而RestTemplate
默认是不会自动注入在spring容器中的,但是RestTemplateBuilder
这个用来构建RestTemplate
的实例是被注入的,所以需要用其来构建RestTemplate
。
配置一个构建RestTemplate
的配置类如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Configuration public class RestTemplateConfig {
@Resource private RestTemplateBuilder restTemplateBuilder;
@Bean public RestTemplate buildRestTemplate() { return restTemplateBuilder .rootUri("http://127.0.0.1:8080") .setConnectTimeout(Duration.ofSeconds(5)) .build(); } }
|
最后在调用放做类似如下方式的调用即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Service public class RestTemplateService {
private RestTemplate restTemplate;
@Autowired public RestTemplateService(RestTemplate restTemplate) { this.restTemplate = restTemplate; }
public void callRest() { String response = restTemplate.getForObject("/rest/{name}", String.class, "lazycece"); System.out.println(response); } }
|