美文网首页
SpringCloud之RestTemplate0804

SpringCloud之RestTemplate0804

作者: xiaoqiaobian | 来源:发表于2020-08-04 21:32 被阅读0次

    一、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;
     }
    

    相关文章

      网友评论

          本文标题:SpringCloud之RestTemplate0804

          本文链接:https://www.haomeiwen.com/subject/skrgrktx.html