天天看點

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);
    }
}
           

繼續閱讀