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.pngSpring结构中RestTemplate有三个实现:
-
RestTemplate()
-
RestTemplate(List<HttpMessageConverter<?>> messageConverters)
-
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;
}