mall项目学习笔记

news/2025/9/22 16:56:29/文章来源:https://www.cnblogs.com/Elaina-/p/19103042

springdoc-openapi 替换 Swagger2 总结


为什么要替换为 springdoc-openapi

  1. Springfox/Swagger2 已停止维护
    无法适配 Spring Boot 新版本,存在安全和兼容性隐患。

  2. 与 Spring Boot 2.6+ 兼容性差
    经常出现启动报错、NPE 等严重兼容性问题,社区已无有效修复方案。

  3. springdoc-openapi 支持 OpenAPI 3 标准
    完全支持 OpenAPI 3 规范,功能更强大,文档结构更清晰,支持更多新特性。


迁移主要更改

  1. Maven 依赖调整

    • 移除(或注释)Springfox/Swagger2 相关依赖(如 io.springfox:springfox-boot-starter:3.0.0)。
    • 新增 springdoc-openapi 依赖。
  2. 注解替换

    • 将 Controller 和实体类中的 Swagger2 注解替换为 OpenAPI 3 注解:
      • @Api@Tag
      • @ApiOperation@Operation
      • @ApiModelProperty@Schema
  3. 配置类调整

    • 删除原有的 Swagger2Config.java 配置类(如有)。
    • 新增 OpenApiConfig.java,用于自定义文档信息(如标题、描述等)。

项目搭建

1. 生成 Spring Boot 聚合项目

pom.xml 中添加相关依赖:

 - 父工程 `pom` 设置 `<parent>` 继承 Spring Boot 版本控制,设置 `<modules>` 管理子模块。

2. 子模块初始化

目录结构

  • 目录树01

添加依赖

修改 Spring Boot 配置文件 application.yml

 - 添加数据源配置和 MyBatis 的 `mapper.yml` 路径配置。- ![application.yml 配置截图](https://img2024.cnblogs.com/blog/3492432/202509/3492432-20250920232805654-1999344054.png)

MyBatis Generator 配置:

 - `generatorConfig.xml`:配置连接数据库信息,生成的 Java 实体类、Mapper.xml 文件、Mapper 接口文件所在包及位置等。- `MyBatisConfig.java`:用于配置需要动态生成的 mapper 接口路径,让 Spring 能识别和管理 Mapper 接口。- `CommentGenerator.java`:自定义注释生成器,继承自 MBG 的 DefaultCommentGenerator,用于在生成的实体类字段上添加数据库备注等注释,提升代码可读性。- `Generator.java`:generator 的 main 函数生成代码,读取 `generatorConfig.xml`,解析并执行代码。- `generator.properties`:结合 generatorConfig.xml 使用,作为参数引用,通过 ${} 占位符引用- `PmsBrandMapper.xml`:SQL 映射文件,定义了具体的 SQL 语句和结果映射关系,供 Mapper 接口调用。- `PmsBrandMapper.java`:Mapper 接口,定义了对 PmsBrand 表的增删改查(CRUD)方法,供 Service 层调用,实际 SQL 由 MyBatis 实现。- `PmsBrand.java`:实体类,对应数据库中的 PmsBrand 表,每个字段映射一列,用于数据传递。- `PmsBrandExample.java`:条件构造器类,用于动态生成复杂的查询条件(如 where、order by),常配合 Mapper 的 selectByExample 等方法实现灵活查询。

Controller 接口实现:

 - 实现 `PmsBrand` 表的添加、修改、删除及分页查询接口。- `IErrorCode.java`:封装 API 的错误码- `ResultCode.java`:实现 IErrorCode 接口,枚举常用 API 操作码- `CommonResult.java`:结合 ResultCode,实现通用返回对象- `CommonPage.java`:分页数据封装类- `PmsBrandService.java`:接口文件- `PmsBrandServiceImpl.java`:实现接口- `PmsBrandController.java`:实现具体功能

3. 加入Springfox/Swagger2 UI(高版本废弃,可采用springdoc-openapi

目录结构

 - 若需要调整为springdoc-openapi,可前往问题解答查看- ![目录树02](https://img2024.cnblogs.com/blog/3492432/202509/3492432-20250920233019574-788653682.png)

依赖引入:

 - springfox swagger官方Starter:io.springfox:springfox-boot-starter:3.0.0

application.yml:新增Spring MVC路径匹配策略

 - spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER- ANT_PATH_MATCHER 表示使用传统的 Ant 风格路径匹配(如 /api/**),而不是 Spring 5.3+ 默认的 PathPatternParser。常用于解决升级 Spring Boot 后,部分路由、拦截器、Swagger 等路径匹配不兼容的问题。

Swagger2配置

 - `Swagger2Config.java`:Swagger 的核心配置类,创建并配置 Docket,指定扫描的 Controller 包,设置 API 信息。- `PmsBrandController.java`:调整内容,补充Swagger 注解- `CommentGenerator.java`:调整注释生成器,配置后,用于在自动生成的实体类字段上添加 @ApiModelProperty 注解- 运行Generator.java重新生成文件- 运行项目,即可访问http://localhost:8080/swagger-ui/

4. 整合Redis实现缓存功能

目录结构

 - ![目录树03](https://img2024.cnblogs.com/blog/3492432/202509/3492432-20250920233029324-905195071.png)

依赖引入:

 - Spring Data Redis依赖配置:org.springframework.boot:spring-boot-maven-plugin

application.yml

 - 添加Redis的配置及Redis中自定义key的配置。

RedisConfig.java

 - 用于自定义和优化 Spring Boot 项目中 Redis 的序列化方式、缓存管理等,保证数据能正确存储和读取,提升兼容性和性能。

RedisService.java

 - redis接口用于定义一些常用Redis操作- `RedisServiceImpl.java`:注入StringRedisTemplate,实现RedisService接口

UmsMemberService.java

 - 定义会员相关的业务接口(如生成、校验验证码)。- `UmsMemberServiceImpl.java`:实现会员业务逻辑,调用 RedisService 进行验证码的存取。- 生成验证码时,将自定义的Redis键值加上手机号生成一个Redis的key,以验证码为value存入到Redis中,并设置过期时间为自己配置的时间(这里为120s)。校验验证码时根据手机号码来获取Redis里面存储的验证码,并与传入的验证码进行比对。- `UmsMemberController.java`:编写 Controller 层,暴露获取和校验验证码的接口,调用 UmsMemberService。

5. 整合SpringSecurity和JWT实现认证和授权

目录结构

  • 目录树04

依赖引入:

 - SpringSecurity依赖配置:org.springframework.boot:spring-boot-starter-security- JWT(Json Web Token)登录支持:io.jsonwebtoken:jjwt:0.9.1- Hutool Java工具包:cn.hutool:hutool-all:5.8.9

application.yml

 - 添加jwt,secure相关配置

AdminUserDetails.java

 - 先定义用户信息封装类,便于后续认证和授权。

UmsResource.java

 - 表示系统中的“后台资源”实体,是数据库表的映射

UmsAdminService.java

 - 定义用户管理接口,明确需要哪些功能。

UmsAdminServiceImpl.java

 - 实现接口,完成用户、资源、登录等核心业务逻辑。

JwtTokenUtil.java

 - 实现 JWT 生成和校验工具类,供登录和认证使用。

MallSecurityConfig.java

 - 配置如何获取用户信息,注入自定义的 UserDetailsService。

JwtAuthenticationTokenFilter.java

 - 实现 JWT 认证过滤器,集成到 Spring Security。

IgnoreUrlsConfig.java

 - 配置白名单路径,便于安全配置。

RestAuthenticationEntryPoint.javaRestfulAccessDeniedHandler

 - 实现自定义异常处理,提升接口友好性。

SecurityConfig.java

 - 配置安全规则、过滤器链、异常处理等,集成前面所有组件。

UmsAdminController.java

 - 实现接口层,调用 Service 提供登录和资源查询等功能。

6. 整合Elasticsearch实现商品搜索

目录结构

  • 目录树05

依赖引入:

 - Elasticsearch相关依赖:org.springframework.boot:spring-boot-starter-data-elasticsearch

安装Elasticsearch,Kibana

 - 注意Spring Boot与Elasticsearch版本兼容性,- Elasticsearch- 7.17.29- 下载zip包,并解压到指定目录,下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-29- 安装中文分词插件:elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.29- 执行elasticsearch.bat- Kibana- 7.17.29- 下载zip包,并解压到指定目录,下载地址:https://www.elastic.co/downloads/past-releases/kibana-7-17-29- 执行kibana.bat- 访问http://localhost:5601 即可打开Kibana的用户界面

application.yml

 - 添加Elasticsearch相关配置

EsProductAttributeValue.javaEsProduct.java

 - 定义ES文档结构- 定义了存储在Elasticsearch中的商品和商品属性的数据结构(文档结构),通过注解指定了索引、字段类型、分词器等。关系:决定了Elasticsearch索引的数据模型,部署Elasticsearch后,这些类对应ES中的文档结构。- 不需要中文分词的字段设置成@Field(type = FieldType.Keyword)类型,需要中文分词的设置成@Field(analyzer = "ik_max_word",type = FieldType.Text)类型。

EsProductDao.java

 - 自定义DAO接口,用于从数据库中查询商品数据,为后续导入Elasticsearch做准备。

EsProductRepository.java

 - 添加接口用于操作Elasticsearch- 继承ElasticsearchRepository接口,这样就拥有了一些基本的Elasticsearch数据操作方法,同时定义了一个衍生查询方法。

EsProductService.java

 - 添加接口- `EsProductServiceImpl.java`:EsProductService接口的实现类

EsProductController.java

 - 暴露REST API接口,供前端或其他服务调用,实现商品的ES相关操作。关系:最终通过Service间接操作Elasticsearch。

7. 整合Mongodb实现文档操作

目录结构

  • 目录树06

依赖引入:

 - MongoDB相关依赖:org.springframework.boot:spring-boot-starter-data-mongodb

安装Mongodb与Studio 3T

 - 注意Spring Boot与Mongodb版本兼容性,- Mongodb- 4.4.29- 下载zip包,并解压到指定目录,下载地址:https://www.mongodb.com/try/download/community-edition/releases/archive- 新建配置文件mongod.cfg(mongodb.conf),新建data目录用于存放数据,- 启动服务,执行:mongod --config "配置文件"- 启动shell,执行:mongo- 注册成Windows服务:mongod --config "配置文件" --install --serviceName "MongoDB" - 移除服务:mongod.exe --remove  --config "配置文件" --serviceName "MongoDB"- Studio 3T(Robo 3T)- 下载zip包,并解压到指定目录,执行安装程序,下载地址:https://robomongo.org/

application.yml

 - 添加Mongodb相关配置

MemberReadHistory.java

 - 定义 MongoDB 文档结构- 文档对象的ID域添加@Id注解,需要检索的字段添加@Indexed注解。

MemberReadHistoryRepository.java

 - 用于与 MongoDB 交互- 继承MongoRepository接口,这样就拥有了一些基本的Mongodb数据操作方法,同时定义了一个衍生查询方法。

MemberReadHistoryService.java

 - 声明业务方法,定义了浏览历史的服务接口,声明了创建、删除、查询浏览历史的方法,便于后续实现具体业务逻辑。

MemberReadHistoryServiceImpl.java

 - 实现了服务接口,具体通过注入的 MemberReadHistoryRepository(MongoDB JPA 仓库)来操作 MongoDB,实现浏览历史的增删查。

MemberReadHistoryController.java

 - 暴露 REST API,调用 Service。,供前端或其他服务调用,实现浏览历史的创建、删除、查询功能。

8. 整合RabbitMQ实现延迟消息

目录结构

  • 目录树07

依赖引入:

 - Spring AMQP相关依赖:org.springframework.boot:spring-boot-starter-amqp

安装Erlang与RabbitMQ

 - Erlang- 下载zip包,并解压到指定目录,配置环境变量,下载地址:https://www.erlang.org/patches/otp-27.3.4.3- RabbitMQ- 下载zip包,并解压到指定目录,下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.1.4- 启动web管理界面:rabbitmq-plugins enable rabbitmq_management- 执行,在后台执行需加 -detached:rabbitmq-server.bat- 访问:http://localhost:15672/- 默认账号:guest/guest- 创建帐号并设置其角色为管理员:mall mall

application.yml

 - 修改配置,在spring节点下添加RabbitMQ相关配置。

QueueEnum.java

 - 消息队列和交换机的枚举配置,统一管理队列、交换机、路由键的名称,便于维护和调用。

RabbitMqConfig.java

 - RabbitMQ的核心配置类。用于配置交换机、队列及队列与交换机的绑定关系。- 定义了两个DirectExchange(普通和延迟),两个Queue(普通和延迟/死信),以及它们的绑定关系。延迟队列设置了死信交换机和路由键,实现消息到期后转发到实际消费队列。

CancelOrderSender.java

 - 消息发送者。用于向订单延迟消息队列(mall.order.cancel.ttl)里发送消息。- 下单后,调用sendMessage方法向延迟队列发送消息,并设置延迟时间(如30秒),用于订单超时处理。

CancelOrderReceiver.java

 - 消息接收者。用于从取消订单的消息队列(mall.order.cancel)里接收消息。- 监听实际消费队列(mall.order.cancel),收到死信转发的消息后,调用订单服务取消订单。

OmsPortalOrderService.javaOmsPortalOrderServiceImpl.java

 - 订单服务接口及实现。- generateOrder方法下单后调用CancelOrderSender发送延迟取消消息,cancelOrder方法处理订单取消逻辑。

OrderParam.java

 - 下单参数的数据传输对象(DTO),用于接收前端下单请求的数据。

OmsPortalOrderController.java

 - 订单控制器,暴露下单接口,调用服务生成订单。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:通义DeepResearch论文六连发全面解读

实用指南:通义DeepResearch论文六连发全面解读pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

glTF/glb:现在和未来

glTF™ 已经超越了其作为独立 3D 格式的起源。它现在被采用为 ISO 国际标准,并已成为快速扩展的软件工具、标准和扩展生态系统的核心。 鉴于 glTF 在实现跨不同平台、设备和 Web 的 3D 体验方面的核心作用,glTF 生态…

用自己网站域名这么做邮箱seo优化关键词分类

文章目录 跳动的爱心环境需求完整代码详细分析系列文章 跳动的爱心 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境也可以运行&#xff0c;如果想发给好朋友的话需要这…

做网站好公司wordpress的后台链接

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;nums [-1…

如何建立一个网站的快捷方式百度商桥在网站

网络层处理发生在RS485总线上的设备之间的实际通信。由于RS485接口主要是一种电气规范&#xff0c;因此对话可以到此结束&#xff0c;但由于它支持多点&#xff0c;因此需要在 OSI 模型中解决它。 没有针对网络层寻址的固定规范&#xff0c;但RS485总线必须由主机正确管理以避…

网站架构设计师待遇怎么样设计公司装修

一、Django模板引擎 一个强大的工具&#xff0c;用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言&#xff08;Django Template Language&#xff09;的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记&#xff0c;用于执行各种操作。 二、Django…

重庆住房和城乡建设部网站的打印准考证wordpress源神

网络层功能概述 主要任务是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 1、路由选择与分组转发 2、异构网络互联 3、拥塞控制 数据交换方式 电路交换 在进行数据传输时&#xff0c;两个结点之间必须先建立一条专用…

网站建设好卖吗网站设计要注意事项

Canvas-图片旋转 众所周知canvas是位图&#xff0c;你可以在里面渲染你要的东西&#xff0c;不过你只能操作canvas的属性来进行编辑。就是说你并不能操作画进canvas的东西&#xff0c;例如我在canvas里添加一幅画&#xff0c;我现在想将那幅画移动10px&#xff0c;我们并不能直…

个人网站的首页网站还没有建好可以备案吗

一、项目介绍 项目总结 1.按下空格键小鸟上升&#xff0c;不按小鸟下落 2.搭建小鸟需要穿过的管道 3.管道自动左移和创建 4.小鸟撞到管道游戏结束 知识储备 1.C语言 2.数据结构-链表 3.Ncurses库 4.信号机制 二、Ncurses库介绍 Ncurses是最早的System V Release 4.0 (SVr4)中…

网站建设制作公司哪家网站底部版权怎么做

基本概念及统计原理 基本概念 指数平滑法的思想来源于对移动平均预测法的改进。指数平滑法的思想是以无穷大为宽度&#xff0c;各历史值的权重随时间的推移呈指数衰减&#xff0c;这样就解决了移动平均的两个难题。 统计原理 简单模型 Holt线性趋势模型 案例 为了研究上海市…

存储多边形网格的文件格式:OBJ、FBX、RenderMan、glTF、USD 等。

存储多边形网格体 在渲染方面,您始终可以直接在程序的源代码中定义网格,但这是有限的。如果每次要渲染新模型的图像时都需要重新编译程序,那将是不切实际的。为了完整起见,我们仍将在本章中研究该选项。通常,模型…

实用指南:Unity 游戏引擎中 HDRP(高清渲染管线) 的材质着色器选择列表

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析

安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析一、安防监控中报警数据的力量 在安防监控系统中,实时报警通知让我们能够快速响应突发事件。然而,真正体现系统价值的,往往是在事后如何从海…

青岛企业网站建站模板手机下载视频网站模板下载

Guava是一个功能强大的Java开源工具库&#xff0c;提供了很多实用的工具类和函数&#xff0c;可以简化开发过程。本文将介绍Guava的一些基本用法和常用功能。 添加Guava依赖 在开始使用Guava之前&#xff0c;首先需要在项目中添加Guava的依赖。可以通过Maven或Gradle来管理依…

Notepad++8.6免费版下载及安装教程(附安装包)2025最新整理

一、Notepad++V8.6.4 下载链接 软件名称:Notepad++ 软件大小:4.59M 系统要求:Win7或更高。32/64位操作系统 下载链接: 夸克网盘:https://pan.quark.cn/s/6ae8353bd5a4 二、Notepad++V8.6.4 软件介绍 Notepad++是一…

LAMP 环境一键部署脚本(Apache+MySQL+PHP) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

东莞洪梅网站建设建站合同

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何控制视频的暂停播放和继续播放&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍…

福州网站定制公司有免费注册网站吗

1.4 C对C语言数据类型的扩展1.4.1 结构体1.4.2 联合1.4.3 枚举1.4.4 布尔1.4.5 字符串 1.4 C对C语言数据类型的扩展 基本的数据类型 char、unsigned char、int、short、unsigned shor、long、unsigned long、float、double、long double与C语言相同。扩展了bool类型&#xff0…

济南做平台网站的前端2024年好找工作吗

一、体系结构相关术语&#xff0c;逻辑存储结构&#xff0c;物理存储结构&#xff0c;服务器结构&#xff0c;常用数据字典 1.1、数据库管理系统中3个重要概念&#xff1a;实例&#xff0c;数据库&#xff0c;数据库服务器 1-实例是一组oracle后台进程以及在服务器中分配的共…

普定县建设局网站深圳全网推广方案

[html] 简述下html5的离线储存原理&#xff0c;同时说明如何使用&#xff1f; 原理&#xff1a;HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术)&#xff0c;通过这个文件上的解析清单离线存储资源&#xff0c;这些资源就会像cookie一样被存储了下来。…