使用 RestTemplate 調用 restful 服務


什么是RestTemplate?

RestTemplate是Spring提供的用於訪問Rest服務的客戶端,RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。
調用RestTemplate的默認構造函數,RestTemplate對象在底層通過使用java.net包下的實現創建HTTP 請求,可以通過使用ClientHttpRequestFactory指定不同的HTTP請求方式。
ClientHttpRequestFactory接口主要提供了兩種實現方式

  • 一種是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)創建底層的Http請求連接。
  • 一種方式是使用HttpComponentsClientHttpRequestFactory方式,底層使用HttpClient訪問遠程的Http服務,使用HttpClient可以配置連接池和證書等信息。

RestTemplate默認是使用SimpleClientHttpRequestFactory,內部是調用jdk的HttpConnection,默認超時為-1

使用示例:

  • 啟動程序
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.client.RestTemplateBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    public class SpringbootRestTemplateApplication {
        
        // 啟動的時候要注意,由於我們在controller中注入了RestTemplate,所以啟動的時候需要實例化該類的一個實例
        @Autowired
        private RestTemplateBuilder builder;
    
        // 使用RestTemplateBuilder來實例化RestTemplate對象,spring默認已經注入了RestTemplateBuilder實例
        @Bean
        public RestTemplate restTemplate() {
            return builder.build();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootRestTemplateApplication.class, args);
        }
        
    }
  • 編寫controller
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import com.chhliu.springboot.restful.vo.User;
    
    @RestController
    public class RestTemplateController {
        
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/template/{id}")
        public User findById(@PathVariable Long id) {
            //http://localhost:8080/user/ 是服務的對應的url
            User u = this.restTemplate.getForObject("http://localhost:8080/user/" + id,User.class);
            System.out.println(u);
            return u;
        }
    }

更多使用語法請查看API文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM