SpringBoot项目模块间通信的两种方式

说明:在微服务架构开发中,一个请求是通过模块之间的互相通信来完成的,如下面这个场景:

创建两个子模块:订单模块(端口8081)、用户模块(端口8082),两个模块之间没有联系,现在需要查询订单,根据订单中的用户ID,查询该订单对应的用户信息。

(两个模块是独立的)

在这里插入图片描述


用户实体类

import lombok.Data;

import java.io.Serializable;

/**
 * 用户
 */
@Data
public class User implements Serializable {

    /**
     * ID
     */
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 地址
     */
    private String address;
}

订单实体类,查询订单需要补充用户信息

import lombok.Data;

import java.io.Serializable;

/**
 * 订单
 */
@Data
public class Order implements Serializable {

    /**
     * ID
     */
    private Long id;

    /**
     * 价格
     */
    private Double price;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 商品名
     */
    private String name;

    /**
     * 商品数量
     */
    private Integer num;

    /**
     * 用户信息
     */
    private User user;
}

此时,因为订单模块中没有用户业务,是没有对应的UserMapper类操作数据库的。这就需要向用户模块发送请求,并传递用户ID,由用户模块里对应的方法去操作数据库,返回用户信息。可以用以下两种方式实现。

方式一:Hutool工具包

可使用Hutool工具包中的get(),向用户模块发送查询用户信息请求;

    @Override
    public Order getOrder(Long id) {

        Order order = orderMapper.getOrder(id);

        // 向用户模块发送请求
        String s = HttpUtil.get("http://localhost:8082/user?id=" + order.getUserId());

        // 解析相应结果
        User user = JSONUtil.toBean(s, User.class);

        order.setUser(user);

        return order;
    }

方式二:RestTemplate

使用RestTemplate中的getForEntity()方法,也可以达到同样的效果,使用前,需要手动添加该类到IOC容器中;

(手动添加Bean到IOC容器中)

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

@Configuration
public class AddBean {

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

(使用RestTemplate的getForEntity方法,向用户模块发送请求)

    @Autowired
    private RestTemplate restTemplate;
	
    @Override
    public Order getOrder(Long id) {

        Order order = orderMapper.getOrder(id);

        // 使用restTemplate的getForEntity()方法向用户模块发送请求
        ResponseEntity<User> entity = restTemplate.getForEntity("http://localhost:8082/user?id=" + order.getUserId(), User.class);

        // 响应结果是一个response实例,先判断响应状态码是不是成功
        if (entity.getStatusCode().is2xxSuccessful()) {
            
            // 取出响应数据使用
            User user = entity.getBody();
            order.setUser(user);
        }

        return order;
    }

restTemplate.getForEntity()方法返回值类型

在这里插入图片描述

测试

postman测试,两者都可以达到相同的效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/36440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式--------行为型模式

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在类间…

VSCODE VUE3 element-ui plaus 环境搭建

目录 一、VUE 1、安装VUE 2、创建项目 二、Element Plus 1、在项目目录中安装 Element Plus&#xff0c;执行 2、引入element 三、vscode 中运行 1、打开项目文件夹 2、点击debug&#xff0c;运行 1&#xff09;、首次lanch chrome时 2&#xff09;、lanch node.js …

MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)

一&#xff0c;MyCat入门 1.什么是mycat 官网&#xff1a;http://www.mycat.org.cn/​ mycat是数据库中间件 它可以干什么&#xff1f; 读写分离数据分片&#xff1a;垂直拆分&#xff0c;水平拆分多数据源整合 2.数据库中间件 ​ 中间件&#xff1a;是一类连接软件组件和…

十五、flex弹性元素的样式

目录&#xff1a; 1. 基本布局 2. 弹性元素的属性&#xff1a;flex-grow 3. 弹性元素的属性&#xff1a;flex-shrink 4. 弹性元素的属性&#xff1a;flex-basis 5. flex 统一设置这3个属性&#xff08;常用&#xff09; 6. order 一、基本布局 <style>*{margin: 0;paddin…

Arcgis之Python的Arcpy的点线面对象的创建处理和通过pandas读取txt中的经纬度坐标创建几何对象

前言 本节将介绍点线面对象的创建和处理。创建点对象有三个类&#xff0c;分别是Point、Multipoint、PointGeometry&#xff0c;创建线对象的类为Polyline&#xff0c;创建面对象的类为Polygon。 一、点对象的创建——Point 点对象经常与光标配合使用。点要素将返回单个点对…

抖音seo矩阵系统源码|需求文档编译说明(技术)

1.抖音seo矩阵系统文档开发流程 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号。因此&#xff0c;抖音SEO矩阵的主要目…

Java阶段四Day11

Java阶段四Day11 文章目录 Java阶段四Day11Spring AOPElasticsearch1. 关于各种数据库的使用2. 关系型数据库中的索引3. 安装与启动elasticsearch4. 访问elasticsearch5. 使用elasticsearch分词6. elasticsearch文档的相关概念7. 使用elasticsearch添加数据7.1. 添加文档7.2. 查…

QT登录界面

1.效果图 2.代码 #include "widget.h" #include "ui_widget.h" #include <QApplication> #include <QWidget> #include <QtWidgets>Widget::Widget(QWidget *parent): QMainWindow(parent), ui(new Ui::Widget) {ui->setupUi(this);…

【CSS】浮动

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 浮动浮动的规则浮动的案例浮动的清除 浮动 float属性可以指定一个元素应沿其容器的…

deeplabv3+源码之慢慢解析 第二章datasets文件夹(1)voc.py--voc_cmap函数和download_extract函数

系列文章目录&#xff08;更新中&#xff09; 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之…

亚马逊云科技推出的一项完全托管的生成式AI服务——Amazon Bedrock

在全球生成式AI浪潮兴起之际&#xff0c;以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;于7月6日在上海世博中心拉开帷幕。大会首日&#xff0c;亚马逊云科技携生成式AI产品Amazon Bedrock亮相大会现场&#xff0c;亚马逊云…

Linux发行版Gentoo被发现有漏洞,在SQL注入方面存在安全风险

近日有消息表明&#xff0c;Gentoo Linux发行版中存在漏洞CVE-2023-28424&#xff0c;并且极有可能被黑客利用该漏洞进行SQL注入攻击。 据悉&#xff0c;研究人员从 GentooLinux的Soko搜索组件中找到了这个漏洞&#xff0c;并且该漏洞的CVSS风险评分为 9.1&#xff0c;属于特别…

使用Pytorch加载预训练模型及修改网络结构

Pytorch有自带的训练好的AlexNet、VGG、ResNet等网络架构。详见官网 1.加载预训练模型 import torch import torchvision import torch.nn as nn import torch.optim as optim import torch.nn.functional as F import torchvision.transforms as transforms import torchvis…

【QQ好友列表-设置HeaderView Objective-C语言】

一、咱们一起来看 刚才咱们是不是给大家说到 创建好模型了 是不是单元格,我们需要自定义单元格了 自定义单元格的步骤: 我相信大家现在脑子里,应该有那个代码的思路了吧 1)首先,是不是要新建一个类型啊 这个类型应该建在哪个里面 是不是应该建在我们的View里面 View…

linux常见指令下

接下来我们就聊聊linux的后面十条指令。 一:echo 作用是往显示器输出内容&#xff0c;和printf类型&#xff0c;但是该指令最核心的是与之相关的一些概念 概念1.输出重定向&#xff1a; echo不仅可以向显示打印内容&#xff0c;还可以向文件输出内容&#xff0c;本应该输出到…

图片视频抹除算法总结Inpaint

基本是从图片抹水印和视频抹水印两个方向 Video Inpainting&#xff1a;https://paperswithcode.com/task/video-inpaintingImage Inpainting&#xff1a;https://paperswithcode.com/task/image-inpainting 请根据目录查看 图片 Partial Conv 部分卷积层 源自于Image In…

人工智能时代如何加强网络安全

人工智能正在为软件开发人员赋予以前被认为难以想象的新能力。新的生成式人工智能可以提供复杂、功能齐全的应用程序、调试代码或使用简单的自然语言提示添加内嵌注释。 它已准备好以指数方式推进低代码自动化。但与此同时&#xff0c;新一代人工智能可能会为不良行为者提供帮…

vue中控制element表格列的显示与隐藏

背景 根据‘执行进度计算方式’的单选框里面的选项不同&#xff0c;展示不同的column 按最小制剂单位统计: 按含量统计: 实现方式 就是拿到选项框里面的值&#xff0c;再根据里面的值来判断哪些column显示和隐藏&#xff1b;关于显示和隐藏可以设置变量&#xff1b; <…

比对Excel数据

以a个为准绳比对b表数据&#xff0c;添加比对结果列输出。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么…

训练自己的ChatGPT 语言模型(一).md

0x00 Background 为什么研究这个&#xff1f; ChatGPT在国内外都受到了广泛关注&#xff0c;很多高校、研究机构和企业都计划推出类似的模型。然而&#xff0c;ChatGPT并没有开源&#xff0c;且复现难度非常大&#xff0c;即使到现在&#xff0c;没有任何单位或企业能够完全复…