Spring Boot使用RestTemplate調用其他微服務


RestTemplate位於spring-web模塊,org.springframework.web.client包下,是Spring同步客戶端HTTP訪問的核心類,它強制使用Restful原則來簡化和HTTP服務端的交互。它處理HTTP連接,分離應用程序代碼來提供URL(可能需要很少的模板變量)和提取結果。

注意:默認,RestTemplete依賴標准的JDK工具類來建立HTTP連接,你可以通過setRequestFactory屬性使用不同的HTTP庫來替換他,比如Apache HttpComponent,Netty和OkHttp.

 

 

 

另外,exchangeexecute方法是以上方法的通用版本能夠用於支持額外的較少使用的組合(例如:HTTP PARCH,攜帶響應體的HTTP PUT),但是請注意,所使用的基礎HTTP庫也必須支持所需的組合。

每一個HTTP方法都有三個變種:兩個接收一個URI的模板字符串和URI變量(數組和變量),第三種接收一個URI,請注意,對於URI模板,嘉定必須進行編碼。 eg: restTemplate.getForObject("https://example.com/hotel list")會變成https://example.com/hotel%20list 這也意味着,如果URI模板或URI變量已被編碼,則會發生雙重編碼 eg: https://example.com/hotel%20list變成了https://example.com/hotel%2520list為了避免這種情況,請使用URI方法變體來提供(或重新使用)以前編碼的URI。 要准備完全控制編碼的URI,請考慮使用org.springframework.web.util.UriComponentsBuilder.

在內部模板使用HttpMessageConverter實例在POJO之間來回轉換HTTP消息。 默認情況下,通過setMessageConverters已注冊主要mime類型的轉換器,但您也可以注冊其他轉換器.

該模板使用org.springframework.http.client.SimpleClientHttpRequestFactoryDefaultResponseErrorHandler作為分別創建HTTP連接或處理HTTP錯誤的默認策略。 可以分別通過setRequestFactorysetErrorHandler覆蓋這些默認值。

Demo

引入Maven依賴

<properties>
<!-- JDK版本 -->
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.22.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>

創建消息實體類

public class MsgBean {
private int id;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "MsgBean{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

創建SpringBoot運行主類

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

 

創建RestTemplate配置類,獲取TestTemplate對象

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return new RestTemplate(factory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);//5秒
        factory.setConnectTimeout(15000);//15秒
        return factory;
    }
}

 

創建被調用服務類ServerController,來模擬一個微服務,可通過restful API調用

/**
* Created by fubin on 2019/9/24.
* 被調用的controller
*/

@RestController
@RequestMapping("server")
public class ServerController {

@GetMapping("/get")
public MsgBean get(){
MsgBean msgBean = new MsgBean();
msgBean.setId(1);
msgBean.setName("msg1");
return msgBean;
}

@PostMapping("/post")
public MsgBean post(){
MsgBean msgBean = new MsgBean();
msgBean.setId(1);
msgBean.setName("msg1");
return msgBean;
}

/**
* post 方法傳值
* @param id
* @param name
* @return
*/
@PostMapping("/postParam")
public String postParam(@RequestParam("id") String id, @RequestParam("name") String name){
System.out.println("Post id:"+id);
System.out.println("Post name:"+name);
return "post succ";
}


/**
* post 方法傳值
* @param id
* @param name
* @return
*/
@PutMapping("/put")
public String put(@RequestParam("id") String id,@RequestParam("name") String name){
System.out.println("put id:"+id);
System.out.println("put name:"+name);
return "del succ";
}


/**
* del方法傳值
* @param id
* @return
*/
@DeleteMapping("/del")
public String del(@RequestParam("id") String id){
System.out.println("del id:"+id);
return "del succ";
}


}

 

創建一個服務調用類InvokeController,通過RestRemplate調用ServerController的服務


免責聲明!

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



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