HTTP同步客戶端類RestTemplate在微服務中的使用
阿新 • • 發佈:2019-02-19
在Spring Cloud中使用
依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
- spring-cloud-starter-netflix-eureka-client 註冊該服務到Eureka註冊中心
- spring-cloud-starter-netflix-ribbon 讓客戶端支援負載均衡
配置RestTemplate
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@LoadBalanced註解讓RestTemplate支援負載均衡
使用RestTemplate請求微服務
假定有一個已啟動的微服務:HELLO-SERVICE
Get請求
restTemplate url引數對映方式一:
String body = restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={1}", String.class, "restTemplate url引數對映方式一").getBody();
restTemplate url引數對映方式二:
Map<String, String> params = new HashMap<> ();
params.put("name", "restTemplate url引數對映方式二");
String body = restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={name}", String.class, params).getBody();
restTemplate url引數對映方式三:
UriComponents uriComponents = UriComponentsBuilder.fromUriString("http://HELLO-SERVICE/hello1?name={name}")
.build()
.expand("yidasanqian expand")
.encode();
URI uri = uriComponents.toUri();
String body = restTemplate.getForEntity(uri, String.class).getBody();
Post請求
String postResult = restTemplate.postForObject("http://HELLO-SERVICE/hello3", user, String.class);
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://HELLO-SERVICE/hello3", user, String.class);
postForObject
和postForEntity
方法的第二個引數是一個請求體,第三個引數是響應結果型別。
Put請求
restTemplate.put("http://HELLO-SERVICE/hello4?name={1}", user, "yidasanqian");
Delete請求
restTemplate.delete("http://HELLO-SERVICE/hello6?id={1}", "1");
Patch請求
String result = restTemplate.patchForObject("http://HELLO-SERVICE/hello5", user, String.class);