首页 > 其他分享 >远程调用--RestTemplet

远程调用--RestTemplet

时间:2024-07-02 16:20:26浏览次数:26  
标签:发送 调用 http 请求 -- items RestTemplate RestTemplet item

服务拆分后,服务之间的远程过程调用称RPC; Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。

利用RestTemplate发送http请求与前端ajax发送请求非常相似,都包含四部分信息:

  • ① 请求方式
  • ② 请求路径
  • ③ 请求参数
  • ④ 返回值类型
项目: 1.注册:(启动类也是配置类,也可以写入启动类中)
package com.hmall.cart.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RemoteCallConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

2.将RestTemplate注入类中,写发送请求的类型。

购物车业务通过注入商品类查询商品--->换成--->通过RestTemplate模拟http发送 查询商品 请求,得到响应结果查看响应码,失败则return,否则继续取到响应体,继续执行。

private void handleCartItems(List<CartVO> vos) {
    // TODO 1.获取商品id
    Set<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());
    // 2.查询商品
    // List<ItemDTO> items = itemService.queryItemByIds(itemIds);
    // 2.1.利用RestTemplate发起http请求,得到http的响应
    ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
            "http://localhost:8081/items?ids={ids}",
            HttpMethod.GET,
            null,
            new ParameterizedTypeReference<List<ItemDTO>>() {//如果使用字节码,就不能指定泛型,因为会被擦除,这里通过对象类型引用 保留泛型不被擦除
            },
            Map.of("ids", CollUtil.join(itemIds, ","))//以key,value的形式对应上述请求参数,join是连接方法,将itemIds通过逗号拼接
    );
    // 2.2.解析响应
    if(!response.getStatusCode().is2xxSuccessful()){
        // 查询失败,直接结束
        return;
    }
    List<ItemDTO> items = response.getBody();
    if (CollUtils.isEmpty(items)) {
        return;
    }
    // 3.转为 id 到 item的map
    Map<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));
    // 4.写入vo
    for (CartVO v : vos) {
        ItemDTO item = itemMap.get(v.getItemId());
        if (item == null) {
            continue;
        }
        v.setNewPrice(item.getPrice());
        v.setStatus(item.getStatus());
        v.setStock(item.getStock());
    }
}

 

基本步骤如下:

  • 注册RestTemplate到Spring容器
  • 调用RestTemplate的API发送请求,常见方法有:
    • getForObject:发送Get请求并返回指定类型对象
    • PostForObject:发送Post请求并返回指定类型对象
    • put:发送PUT请求
    • delete:发送Delete请求
    • exchange:发送任意类型请求,返回ResponseEntity

 

标签:发送,调用,http,请求,--,items,RestTemplate,RestTemplet,item
From: https://www.cnblogs.com/fengok/p/18280010

相关文章

  • StarRocks 入门指南:创建和管理数据库及表
    本文介绍如何在StarRocks中创建数据库和表,插入数据,执行常用的系统管理命令,以及一些常用配置的修改方法,快速了解上手StarRocks。设置环境变量首先,我们需要设置JAVA_HOME环境变量,以便StarRocks能够找到Java运行时环境。exportJAVA_HOME="/data3/starrocks/jdk-17.0.11"......
  • 01字典树和可持久化01字典树
    01字典树01字典树是一种只有0和1两种边的字典树。可以解决查询第\(k\)小,查询\(x\)是第几小等问题。查询第\(k\)小可以把输入的数转成等长二进制,然后插入01字典树。比如将\([0,0,1,3,3]\)插入字典树:这里红色数字表示以该段为前缀的数的个数,黑色表示对应的数。假设我......
  • 喷射氦气高温等离子体达到超光速的方法
    喷射氦气高温等离子体达到超光速的方法马王堆汉墓是西汉初期长沙国丞相利苍及其家属的墓葬,位于中国中部湖南省的长沙市。1972~1974年,考古工作者在这里先后发掘了3座西汉时期墓葬。在马王堆汉墓出土的帛书五星占,记载了古人通过五星的运行进行占卜的卜辞。五星就是金木水火土五星,它......
  • nacos漏洞利用
    nacos概述Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。简单来说nacos就是阿里开发的一个中间件,它主要提供三种功能:持久化节点注册,非持久化节点注册和配置管理。他里面包含大量的......
  • 多个vue项目nginx部署流程
    nginx部署流程#在nginx.conf中配置#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections1024;}http{incl......
  • rust 字符串拼接
    提问rust字符串拼接方式回答format!("{}{}",s1,s2);fnmain(){lets1="Hello";lets2="World";//Usingformat!macroforconcatenationletresult=format!("{}{}",s1,s2);println!("......
  • Wget 命令教程
    简介Wget是一个免费和开源的软件工具,用于从网络上下载文件。它是GNU项目的一部分,适用于Unix类操作系统(如Linux和MacOS)以及Windows。wget名称来自于“WorldWideWeb”和“get”的组合,表示它主要用于从Web上获取内容。特性:支持HTTP、HTTPS和FTP协议:wget可以通过这三种常见的......
  • Johnson-Lindenstrauss Lemma 随即投影
    michael 作者忘忧草不是大佬。我感觉我说的挺具体的了,一共就两行代码,一行构建随机矩阵,一行做矩阵乘法。你会python的话可以这么写:g_matrix=numpy.random.normal(size=(n,m))output=numpy.matmul(input,g_matrix)2021-12-08​回复​1mic......
  • JavaScript 中删除数组元素
    在JavaScript中,没有像Java的ArrayList中的remove方法那样直接删除指定元素的方法,删除指定下标的数组元素可以通过几种方式实现方法一:使用 splice() 方法splice()方法可以在数组中添加或删除元素,并返回被删除的元素。letarr=[1,2,3,4,5];letindexToRemove......
  • CentOS7安装使用LibreOffice
    背景:公司产品有文档转pdf的需求,但是centos7下面默认的是python2.7,在网上找了很多教程,都不太理想,于是自己琢磨了一下,发现LibreOffice自带的python环境刚刚好,但是没有LibreOffice的侦听器模式unoserver,而且这个python环境没有自带pip工具,于是便有了这篇随笔笔记:我是在centos的d......