springboot中使用RestTemplate调用rest服务

    xiaoxiao2022-07-07  175

    日常开发中,调用远程的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); } }
    最新回复(0)