springboot中使用RestTemplate调用rest服务
日常开发中,调用远程的rest服务是很常见的,比如微服务情况下的rest服务调用,又或者是调用第三方服务。微服务下的调用有服务注册与发现机制来调用,也可以使用RestTemplate
方式来调用;而要是第三方服务,那么一般情况下是通过HTTP请求来调用。
接下来就看说一下在springboot项目中,用RestTemplate
来调用远程rest服务,包括第三方服务。
首先我们的web项目中一般会有web依赖,此依赖中已有RestTemplate
类,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
其次假设有这样一个rest服务接口,提供一个简单的返回(服务的启动地址为“http://127.0.0.1:8080”),如下所示:
@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
的配置类如下:
@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();
}
}
最后在调用放做类似如下方式的调用即可:
@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);
}
}
还没有评论,来说两句吧...