Spring Cloud Alibaba - RestTemplate
因为此处没有使用<code>LoadBalancerClient</code>做负载均衡,所以在启动类中需要添加注解<code>@LoadBalanced</code>
结果为:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM0UmYkBTMjNTZ3YDZjNWZmJDO3cDZ0MzYmNzM3UWYx8CXxEzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
其中statusCodeValue = 200 httpStatus = 200 OK httpHeaders = <code>[Content-Type:"text/plain;charset=UTF-8", Date:"Fri, 23 Jul 2021 09:02:34 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive", Content-Length:"22"] =[Content-Type:"text/plain;charset=UTF-8", Date:"Fri, 23 Jul 2021 09:02:34 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive", Content-Length:"22"]</code> body = this is a get response
restTemplate.getForEntity(); 方法获取的是状态码、头部信息、结果体
首先在消费者和服务提供者的工程项目中都必须要含有同样的实体类
在服务提供者中存在对应的调用接口:
在消费者中调用:
因为有两种方法,暂且返回String类型,在控制台将两种方法获得的User对象输出:
tips:restTemplate.getForObject( )方法仅返回该请求的内容体
消费者中编写接口:
![image-20210723183459508](E:\software\JAVA\springcloud-alibaba\document\动力节点spring cloud alibaba\image-20210723183459508.png)
tips:注意参数存放只能存放在MultiValueMap接口实现类为LinkedMultiValueMap的map中,其次调用restTemplate.postForObject( )或者是restTemplate.postForEntity( )方法中的传参顺序与get不同,并且传入的url中不需要带有参数
从此以后,restTemplate.xxxForObject( ) 和 restTemplate.xxxForEntity( )两种方法只选择一种方法进行演示
服务端提供相应的服务,通过@RequestBody注解来接收消费者端传进来的对象:
消费者端提供接口:
将原先的数据集合替换为实体对象进行传值。
消费者端:
传输JSON格式的字符串时,需要使用HttpEntity 对JSON
进行包装才可以传输。
服务者端:
同样使用注解@RequestBody 进行接收:
结果如下:
tips:如果restTemplate.postForObject( )方法中除了传输的对象还存在另外需要传的值,如:token,只需在后面继续添加,逗号隔开即可。因为在底层这边维护的是一个可变数组
服务端可以通过@RequestParam注解的方式进行获取:
同样修改时的相关参数需要存在MultiValueMap<String,Object> dataMap = new LinkedMultiValueMap<String,Object>( );中。因为Put请求和Post请求类似,甚至可以使用Post请求去代替Put请求。
服务端:
不能使用@RequestBody【User user】 方法接收。
delete请求可以使用get请求代替。参数绑定方式和get请求类似:
消费端接口:
与GET请求类似,但是restTemplate.delete( )方法没有返回值。
ribbon是客户端负载均衡
我们在启动类中进行添加: