1. 程式人生 > >HTTP同步客戶端類RestTemplate在微服務中的使用

HTTP同步客戶端類RestTemplate在微服務中的使用

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

postForObjectpostForEntity方法的第二個引數是一個請求體,第三個引數是響應結果型別。

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