SpringCloud之RestTemplate0804

2020-08-04  本文已影响0人  xiaoqiaobian

一、RestTemplate概念

有道云单词翻译:客户端

传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient,不过此种方法使用起来太过繁琐。Spring这么强大的框架当然会提供一种简单便捷的模板类来进行操作,这就是RestTemplate。

RestTemplate是spring的一个rest客户端,在spring-web这个打包如下。

注意RestTemplate是交给Spring管理生命周期,所以如果在非spring的框架下直接引入spring-web这个包即可。RestTemplate只是对其它Rest客户端的一个封装,本身并没有自己的实现。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
640.jpg

二、Eureka组件中的RestTemplate

springcloud是对各种框架的集合调用,在组件Eureka的快速入门中,就有RestTemplate的使用。

服务治理Eureka.png

Spring结构中RestTemplate有三个实现:

  1. RestTemplate()

  2. RestTemplate(List<HttpMessageConverter<?>> messageConverters)

  3. RestTemplate(ClientHttpRequestFactory requestFactory)。

三、Springboot下的RestTemplate入门

下面对默认实现进行代码测试

客户端配置RestConfig

package com.xiaoqiaobian.consumer.config;
​
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
​
@Configuration
public class RestTemplateConfig {
​
 @Bean
 public RestTemplate restTemplate(){
 RestTemplate restTemplate = new RestTemplate();
 return restTemplate;
 }

客户端的OrderController

package com.xiaoqiaobian.consumer.controller;
​
import com.xiaoqiaobian.consumer.domain.Goods;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
​
/*
 //远程调用Goods服务中的findById接口
 使用RestTemplate
 1\. 定义Bean  restTemplate
 2\. 注入Bean
 3\. 调用方法
 */
@RestController
@RequestMapping("/order")
public class OrderController {
​
 @Autowired
 private RestTemplate restTemplate;
​
 @GetMapping("/goods/{id}")
 public Goods findGoodsById(@PathVariable("id") int id){
 System.out.println("findGoodsById..."+id);
​
 //远程调用Goods服务中的findById接口
 String url = "http://localhost:8000/goods/findById/"+id;
 Goods goods = restTemplate.getForObject("" + url, Goods.class);
 return goods;
 }

springboot启动类ProviderApp

package com.xiaoqiaobian.provider;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
/**
 * 启动类
 */
​
@SpringBootApplication
public class ProviderApp {
​
 public static void main(String[] args) {
 SpringApplication.run(ProviderApp.class,args);
 }

服务提供者的GoodsController

package com.xiaoqiaobian.provider.controller;
​
import com.xiaoqiaobian.provider.domain.Goods;
import com.xiaoqiaobian.provider.service.GoodsService;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@RequestMapping("/goods")
public class GoodsController {
​
 @Autowired
 private GoodsService goodsService;
​
 @GetMapping("/findById/{id}")
 public Goods findById(@PathVariable("id") int id){
 Goods goods = goodsService.findById(id);
 return goods;
 }
上一篇下一篇

猜你喜欢

热点阅读