ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

医院预约挂号系统SSM源码包:建库、跑通、避坑与答辩指南

医院预约挂号系统SSM源码包:建库、跑通、避坑与答辩指南 简介医院预约挂号系统毕业设计源码包基于SSM框架与MySQL数据库构建面向Java方向毕业设计、课程设计学生提供可直接运行、便于二次开发的项目原型。压缩包共1287个文件、大小26.78MB主要包含后端java源码、jsp动态页面、js/css前端交互、png/jpg图片素材、SQL数据库脚本与说明文档结构覆盖前端页面、后端逻辑及数据库层并包含项目部署所需的环境配置说明。系统实现管理员、医生、用户三类角色功能管理员管理用户、医生、门诊信息、预约挂号、取消预约、改约通知、留言板及系统设置医生维护门诊和预约记录用户在线预约、取消或申请改约登录注册、数据库设计及环境配置均有说明。源码配套说明文档与毕业设计论文已有62人学习适合毕业设计、课程作业场景也可用于快速掌握SSM框架下预约业务从后端到前端的完整开发与部署。1. 医院预约挂号系统源码包拿到手先搞清楚这四样东西各自在哪医院预约挂号系统的毕业设计源码包是Java课程设计和毕业设计里被反复复用的一类经典题目压缩包里往往是同一套组合SSM后端、MySQL数据库脚本、前端页面外加说明文档和LW毕业设计论文的缩写。第一次打开这种zip的人最常见的状态不是看不懂代码而是不知道从哪个文件开始动手先解压还是先建库先改配置还是先启动Tomcat。这篇笔记就按“拆开包→建库→跑通→避坑→改造成能答辩的样子”这条路径来讲清楚适合正在做Java课程设计、准备毕业设计答辩、以及想补SSM基础的前端转后端开发者。2. 拆解SSM后端Spring、SpringMVC、MyBatis在预约挂号里各管哪一摊SSM框架在Java课程设计案例源码里的地位就像家常菜里的西红柿炒蛋看起来简单但每个人做出来的版本都不一样。Spring负责对象的创建和事务SpringMVC负责把HTTP请求转发到具体的方法MyBatis负责把SQL和Java对象互相转换。三者各管一摊边界分明这也是它至今还大量出现在毕业设计里的原因——答辩时老师问“数据源怎么配的”“事务加在哪一层”SSM项目能把每一个细节摊开讲。2.1 为什么毕业设计选题偏爱SSM而不是Spring BootSpring Boot用自动装配把大多数配置藏了起来写起来快但答辩时老师追问底层很多同学讲不清楚。SSM不一样它把配置裸露在XML文件里数据源、事务管理器、Mapper扫描路径都要自己写虽然繁琐但每个文件都有明确用途反而是学习框架原理的好素材。我一般建议如果你的目标是尽快交差那选Spring Boot更省事如果目标是答辩时能扛住追问SSM这份源码的特色是配置完整能从Spring容器讲到SpringMVC的请求链路再讲到MyBatis的动态SQL素材足够撑起15分钟的陈述。这也就是标题里写着“ssm后端”而不是“springboot后端”的原因。提示别一上来就想把这个SSM项目改成Spring Boot。毕业设计答辩看重的是你能不能说清楚原项目的来龙去脉而不是用了多少新技术。把SSM跑通、讲透已经足够。2.2 Spring排班、预约这些Bean是谁创建和管理的SSM项目里Spring做的事可以归结为三件扫描注解并创建Bean、实例化数据源、给Service层方法加事务。这三件事通常写在一个名为applicationContext.xml的配置文件里。解压源码包后先找这个文件它决定了项目启动时能不能把各个模块串起来。context:component-scan base-packagecom.hospital context:exclude-filter typeannotation expressionorg.springframework.stereotype.Controller/ /context:component-scan bean iddataSource classorg.apache.commons.dbcp.BasicDataSource destroy-methodclose property namedriverClassName valuecom.mysql.jdbc.Driver/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ property nameinitialSize value5/ property namemaxActive value20/ /bean bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean property namedataSource refdataSource/ property namemapperLocations valueclasspath:mapper/*.xml/ /bean bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean这段配置里有两个细节值得注意。第一component-scan扫描了com.hospital包但排除了Controller注解因为Controller要交给spring-mvc.xml单独管理否则会出现同一个Bean被创建两次的歧义。第二dataSource用了DBCP连接池initialSize是启动时创建的连接数maxActive是最大连接数预约挂号系统在课程设计场景下并发不高这两个参数不必调大。2.3 SpringMVC一个“查科室医生”的请求在框架里走了一遍什么SpringMVC是SSM里的请求分发层。登录页面点“查看医生列表”前端发起一个AJAX请求URL是/doctor/listDispatcherServlet根据映射找到对应的Controller方法参数绑定、方法执行、结果转JSON返回给前端。Controller RequestMapping(/doctor) public class DoctorController { Autowired private DoctorService doctorService; RequestMapping(value /list, method RequestMethod.GET) ResponseBody public Result listDoctor(RequestParam(required false) Integer deptId, RequestParam(required false) String date) { ListDoctor doctors doctorService.findByCondition(deptId, date); return Result.success(doctors); } }前端传参的坑大多数出在这个Controller上。前端JS用$.ajax发请求data里写的字段名必须和RequestParam的参数名一致比如前端传deptId后台写成departmentId那拿到的一律是null。SpringMVC对参数名敏感不像Spring Boot那样有宽松的绑定策略。另外required false这个属性别省略。预约挂号首页的筛选条件是可选的用户可能只选科室不选日期也可能只选日期不选科室参数缺省时要让方法正常进入进去再让MyBatis动态处理。2.4 MyBatis科室日期组合筛选为什么必须用动态SQLMyBatis在预约挂号系统里最出彩的用法是动态SQL。首页三个筛选条件科室、日期、医生姓名用户可能任意组合也可能一个都不选如果全查出来再在内存里过滤代码写起来啰嗦不说数据库压力也大。MyBatis的做法是在XML里用条件标签拼SQL。select idfindByCondition resultTypecom.hospital.entity.Doctor select * from doctor where if testdeptId ! null and dept_id #{deptId} /if if testdate ! null and id in (select doctor_id from schedule where work_date #{date}) /if /where order by doctor_id /select标签会自动处理掉第一个条件前面的and避免拼出“where and ...”这种SQL语法错误。 标签判断某个条件是否存在存在才拼进SQL。这里要强调一点参数占位用#{}它会生成预编译的占位符?防止SQL注入而${}是把字符串直接拼进SQL常用于order by这样的动态字段但存在注入风险。在这个项目里凡是用户输入的值都走#{}。3. 预约挂号的MySQL数据库设计几张核心表与建库脚本一次跑通拿到zip后的第一个动作不是启动Tomcat而是先找SQL脚本把数据库建起来。SSM项目的运行完全依赖数据库表名或字段名错一个MyBatis就报“无效的列名”。标题里明确写了mysql数据库说明这个包自带建表脚本一般在源码根目录的sql文件夹下文件名常见的是hospital_db.sql或init.sql。3.1 表结构用户、医生、排班、预约记录之间的依赖关系预约挂号系统的核心表一般是四张。用户表存患者账号医生表存医生的基本信息和所属科室排班表存某个医生在某一天某个时段的出诊情况预约记录表存患者和排班之间的绑定关系。排班表是这套设计的重点它把“医生出诊”和“号源数量”拆成了独立概念。一个医生一周出诊五天每天分上午下午每个时段放30个号。如果不在排班表里体现直接在医生表加一个number字段那医生和号源就成了固定一对一关系根本没法表达一周内不同时段号量不同的现实逻辑。患者和医生是多对多关系一个患者可以预约多个医生一个医生的号源被多个患者挂走。通过预约记录表把这个多对多拆成了两个一对多用户一对多预约记录排班一对多预约记录。这就是数据库设计的常规做法答辩时把这个关系画出来就能讲清楚整个系统的数据流向。3.2 建库建表SQL表结构、默认值和关键索引SSM源码包自带的SQL脚本风格可能各不相同但核心表结构大同小异。下面的脚本是按该题目的常见需求整理出来的精简版实际以源码包里的脚本为准字段名如果不同需要同步修改MyBatis的Mapper XML。CREATE DATABASE IF NOT EXISTS hospital_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; USE hospital_db; CREATE TABLE user ( id BIGINT NOT NULL AUTO_INCREMENT, username VARCHAR(64) NOT NULL, password VARCHAR(64) NOT NULL, real_name VARCHAR(32), phone VARCHAR(20), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE schedule ( id BIGINT NOT NULL AUTO_INCREMENT, doctor_id BIGINT NOT NULL, work_date DATE NOT NULL, period TINYINT NOT NULL DEFAULT 0 COMMENT 0上午 1下午, total_num INT NOT NULL, remain_num INT NOT NULL, PRIMARY KEY (id), KEY idx_doctor_date (doctor_id, work_date) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE appointment ( id BIGINT NOT NULL AUTO_INCREMENT, user_id BIGINT NOT NULL, schedule_id BIGINT NOT NULL, status TINYINT NOT NULL DEFAULT 0 COMMENT 0待就诊 1已完成 2已取消, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_user (user_id), KEY idx_schedule (schedule_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这段脚本有几个参数值得说清楚。status字段用TINYINT而不是VARCHAR是因为它只存0、1、2三个状态注释里写明含义代码里用数字判断比存字符串更省空间。period同样用TINYINT0代表上午1代表下午。appointment表的status默认值为0也就是“待就诊”MySQL会在不传该字段时自动填0这对应了很多人搜的“mysql设置默认值为0”的场景。索引方面schedule表建了(doctor_id, work_date)联合索引因为按医生查日期是最频繁的查询条件。appointment表分别给user_id和schedule_id建了普通索引查“我的预约”和“某个排班被约了多少”都能走索引。提示脚本里没建物理外键这是有意为之。外键虽然能保证数据一致性但删除数据时限制多课程设计经常要清空重导数据物理外键会在删除父表数据时跳出来报错。逻辑外键由业务代码保证截图时也更好看。建库之后执行导入命令mysql -uroot -p hospital_db.sql也可以进入MySQL后执行source命令。mysql -uroot -p source /path/to/hospital_db.sql;导入完成后验证一下表结构和数据mysql -uroot -p -e USE hospital_db; SHOW TABLES; SELECT * FROM schedule LIMIT 5;除了命令行用Navicat for MySQL或MySQL Workbench可视化导入也都可以Workbench里选择Server菜单下的Data Import指定SQL文件路径即可。不管是命令行还是可视化工具重点是把字符集设为utf8mb4否则出现中文乱码排查起来特别头疼。3.3 连接串参数字符集、时区、useSSL数据库建好后后端要通过jdbc.properties连接它。这个文件通常在源码的resources目录下里面配了驱动、URL、用户名密码是整个项目能否连上数据库的关键。常见配置如下jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/hospital_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.password123456URL里的参数每个都有来头。useUnicodetrue和characterEncodingutf8用来保证中文不会乱码useSSLfalse是因为MySQL 5.7之后默认开启SSL握手本地开发环境没有配置证书true会反复握手失败serverTimezoneAsia/Shanghai是要把服务器时区指定为东八区不指定的话有时会报时区无法识别的错误或者存入数据库的时间比实际时间少8小时。驱动类名也有讲究。MySQL 5.x对应com.mysql.jdbc.DriverMySQL 8.x要用com.mysql.cj.jdbc.Driver。源码包如果按MySQL 5.7写的驱动而你本机装了MySQL 8.0就需要把驱动依赖和驱动类名一起改。这一步是SSM项目最常见的启动失败原因之一我见过太多人在这里折腾一晚上。4. 把zip源码跑通从JDK、Maven到Tomcat的完整复现步骤数据库就绪后第二步是把项目导入IDE并部署到Tomcat。这一步的流程不比写代码简单因为SSM项目对环境的敏感度很高JDK版本、Maven仓库、Tomcat版本任何一个不匹配启动就会报错。按下面顺序来能少走弯路。4.1 环境版本搭配别用最新版折腾自己SSM是老框架组合它对JDK和Tomcat的兼容性有明确边界。很多同学电脑上装了最新版JDK导入后编译报错第一反应是代码有问题其实是版本不兼容。推荐的搭配如下组件建议版本注意点JDK1.8JDK 11以上可能遇到cglib代理和JAXB缺失问题Maven3.6.x3.8以上建议改镜像源否则依赖下载慢Tomcat8.5Tomcat 10改为jakarta命名空间SSM代码无法直接运行MySQL5.78.0可用但要同步改驱动类名和连接串参数JDK版本这块是最大的坑。SSM项目普遍用JDK 1.8编译换成JDK 17后很多老版本Spring的cglib字节码生成会直接抛异常。装过多个JDK的环境记得在IDEA里把Project Structure和Settings里的Java Compiler都指到1.8。Tomcat 8.5和10的区别也值得留意。Tomcat 9及以下用的包名是javax.servletTomcat 10改成了jakarta.servlet。SSM项目里所有的servlet、jsp相关依赖都按javax写所以Tomcat 10跑SSM项目基本是启动必炸。4.2 导入IDEA和修改配置把项目跑起来的三步第一步解压zip先看目录结构。一个标准的SSM源码包应该有src目录、web目录、sql脚本、说明文档以及pom.xml或lib目录。没有pom.xml的SSM项目是用传统lib包方式导入的IDEA里要选Project Structure手动添加依赖这类包更老旧但操作并不复杂。第二步用IDEA打开pom.xml确认Maven仓库和JDK。这一步要检查pom里的依赖版本是否和本机环境匹配重点看spring、mybatis、mysql-connector-java的版本。常见的配置如下properties spring.version5.2.9.RELEASE/spring.version mybatis.version3.5.6/mybatis.version /properties dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version${spring.version}/version /dependency dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version${mybatis.version}/version /dependency dependency groupIdorg.mybatis/groupId artifactIdmybatis-spring/artifactId version2.0.7/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.49/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.11.4/version /dependency /dependenciesmysql-connector-java版本跟数据库版本要对应。数据库是MySQL 5.7就用5.1.49数据库是MySQL 8.0换成8.0.x版本同时驱动类名改成com.mysql.cj.jdbc.Driver。jackson-databind不是SSM强制依赖但预约挂号系统里Controller用ResponseBody返回JSON必须依赖它把对象序列化成JSON字符串缺了会报找不到合适的转换器。第三步修改jdbc.properties里的密码为本机MySQL密码然后在IDEA里配置Tomcat。配置Tomcat时Deployment里选择war exploded模式Application context填/hospital这样启动后访问地址是http://localhost:8080/hospital。用exploded模式的好处是修改前端页面后不需要重新打包IDEA自动热部署调试效率高。4.3 前端页面和说明文档、LW怎么配合使用源码包里的前端通常分两种。一种是JSP页面放在webapp/WEB-INF/views目录下Controller跳转时返回视图名SpringMVC的视图解析器负责拼接前缀后缀。另一种是静态HTML加AJAX请求HTML放在webapp/static目录下页面通过jQuery请求后端接口渲染数据。这两种没有高低之分JSP在JDK 1.8环境下运行稳定静态HTML则更接近现代前后端分离。实际答辩时老师关心的是页面和数据的交互逻辑而不是模板引擎。看包里的说明文档就能知道前端用哪种方式说明文档一般会写清楚启动步骤、默认账号密码和页面入口。LW论文通常是单独一份Word文档里面包含需求分析、数据库设计、系统实现、系统测试几个章节。这篇文档的作用是给你一个框架参照但一定不能直接照搬。跑通系统后重新截取自己电脑上的运行截图替换论文里的旧图这是很多老师会核对的地方网上原版截图满天飞不改就会被看出来。5. SSM挂号系统踩坑实录5个最容易翻车的问题和定位命令跑SSM项目的过程就是一个反复踩坑的过程而且很多坑看起来跟代码没关系实际上全是配置问题。下面这五个问题是我在帮同学排查时遇到频率最高的每个都按“现象→原因→解决”说明遇到了直接照着排查。5.1 Tomcat一启动就报BeanCreationException现象启动Tomcat时控制台立刻抛异常关键词是Error creating bean with name doctorController后面的Caused by指向某个类not found或者No qualifying bean。原因分两层。第一层是Service或Mapper的Bean没被Spring扫描到ServiceImpl没加Service注解或Mapper接口没加MapperScan或component-scan的base-package路径写错。第二层是依赖缺失比如spring-jdbc没引入导致事务管理器初始化失败。解决先从异常堆栈里找到是哪个Bean创建失败再逐层排查注解扫描路径。如果是依赖冲突用Maven命令查看依赖树mvn dependency:tree -Dincludesorg.springframework命令会列出所有spring相关依赖的版本。发现多个版本共存时在pom.xml里排除低版本。这类问题的定位思路是先看堆栈最后一行的Caused by绝大多数情况它指向的原因比前面的异常信息更准确。5.2 MySQL连不上error 2002和socket /tmp/mysql.sock现象在终端执行mysql -uroot -p报错信息是ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)。这个报错甚至能拦下已经写好项目的人MySQL服务没启动时终端连不上、Tomcat也连不上整个系统直接黑匣子。原因MySQL服务没有启动或者启动的MySQL实例用的socket路径与客户端默认路径不一致。在Linux和macOS上mysql -uroot默认走socket而项目里jdbc.url走的是localhost:3306的TCP端口这两条访问路径不同服务没启动时都会失败。解决先把MySQL服务拉起来。# Linux systemctl start mysqld systemctl status mysqld # macOS mysql.server start然后验证端口是否监听netstat -an | grep 3306314行内容合理。root密码不对时会报Access denied这种情况要用MySQL的跳过权限表模式重置密码和本问题不同。如果是Docker方式安装的MySQL端口映射、root密码要在docker run参数里设jdbc.properties要和它一致。提示MySQL安装教程很多装完后先别急着配项目打开命令行执行一次mysql -uroot -p确认能进入MySQL再继续。这个验证能隔离掉“数据库没装好”和“项目配置写错”两类问题。5.3 登录页能打开但CSS、JS全丢了现象浏览器输入地址后前端页面能显示但是纯HTML排版所有CSS样式和JS特效全都失效控制台大量404报错路径指向/css/bootstrap.css之类的文件。原因SpringMVC的DispatcherServlet在web.xml里映射为/也就是说所有请求都被Servlet拦截静态资源也走了Controller映射逻辑结果找不到对应的Handler返回404。这是SSM项目里最典型的配置问题。解决在spring-mvc.xml里放行静态资源让静态文件绕过DispatcherServlet。mvc:resources mapping/static/** location/static// mvc:default-servlet-handler/第一行配置把/static/路径下的文件直接交给静态资源处理器第二行是把static之外、找不到映射的请求交给Tomcat默认Servlet处理。如果前端资源放在webapp根目录而不是static子目录第一行改成mvc:resources mapping/css/ location/css//把每个资源目录分别放行。5.4 预约记录没写进数据库但页面提示成功现象在前端提交了一个预约页面上弹出“预约成功”但登录数据库查appointment表一条记录都没有更奇怪的是后端控制台完全不报错。原因事务没有真正生效或事务边界加错了位置。常见做法是有人把Transactional写在Controller的方法上Spring的事务代理基于AOPController默认不在事务增强范围内。另一种情况是写在ServiceImpl的private方法上代理对象无法拦截私有方法事务同样不生效。解决事务注解放到Service实现类的public方法上并且通过接口调用。Service public class AppointmentServiceImpl implements AppointmentService { Autowired private AppointmentMapper appointmentMapper; Autowired private ScheduleMapper scheduleMapper; Override Transactional public int createAppointment(Appointment appointment) { int rows appointmentMapper.insert(appointment); scheduleMapper.decreaseRemainNum(appointment.getScheduleId()); return rows; } }这段代码里insert预约记录和扣减排班剩余号数必须在同一个事务里要么都成功要么都失败。如果预约记录插入成功但号源扣减失败整个事务要回滚否则会出现“库里没记录但号被扣了”的脏数据。用Transactional之后任何一步抛异常都会触发回滚这是预约系统数据一致性的底线。5.5 接口返回的日期变成一串数字现象用Postman调预约列表接口createTime返回的不是“2026-06-01 10:30:00”而是1700000000000这样的长整型数字前端格式化后显示乱码。原因Jackson序列化Date类型时默认输出时间戳。同时Jackson的时区默认是UTC而MySQL存的是东八区时间会有8小时的偏差。解决在实体字段上加JsonFormat注解指定格式和时区。JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8) private Date createTime;加了注解后Jackson序列化时会按照指定格式输出字符串。时区填GMT8或Asia/Shanghai都能解决8小时偏移的问题。如果系统里有多个字段需要格式化更省事的做法是在spring-mvc.xml里配置一个全局限定格式的Jackson对象转换器但项目里只有日期字段出问题的话加注解最快改完重启Tomcat生效。6. 让这个SSM源码包不再是“演示项目”三个值得做的工程化改造跑通只是第一步答辩时想拿高分得让系统看起来不像课程设计的“三件套”。按下面的顺序改三个点投入不大但效果很明显。6.1 把数据源切到HikariCP源码包里很多SSM项目用的是DBCP连接池年代久远高并发下性能一般。HikariCP是目前比较可靠的连接池实现切换只需两步pom.xml加入HikariCP依赖然后替换数据源Bean的class和属性名。bean idhikariDataSource classcom.zaxxer.hikari.HikariDataSource destroy-methodclose property namedriverClassName valuecom.mysql.jdbc.Driver/ property namejdbcUrl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ property namemaximumPoolSize value20/ /bean注意HikariCP的属性名不是url而是jdbcUrlmaximumPoolSize是最大连接数默认10课程设计场景设20足够。改完数据源后SqlSessionFactoryBean和transactionManager里的ref要跟着指向hikariDataSource。6.2 预约接口防超号一条UPDATE语句解决预约挂号的并发写入是个好素材。用一条条件UPDATE就能防止两个用户同时抢最后一个号UPDATE schedule SET remain_num remain_num - 1 WHERE id #{scheduleId} AND remain_num 0;这条SQL能保证只有排班剩余号大于0时才执行扣减数据库的行锁会串行化同一排班的并发操作执行后返回值是1表示扣号成功是0表示号已被抢完。这个写法比先查remain_num再判断再更新安全得多前者在并发时会出现“超卖”。答辩时主动讲这个点老师会认可你考虑了业务细节。防重复提交还可以在appointment表加联合唯一约束让同一个用户对同一个排班只能有一条预约记录MySQL层面直接挡住重复数据。6.3 用Postman做一轮接口验收把结果写进论文最后花半小时用Postman请求一遍系统的核心接口验证返回码和字段。我在做SSM课程设计时的习惯是把每个接口的请求参数、预期结果记录成表格一遍跑下来就能发现隐藏的参数问题。接口方法测试参数预期结果/user/loginPOSTusername, password登录成功返回用户信息/doctor/listGETdeptId, date返回医生列表JSON/schedule/queryGETdoctorId, date返回该医生排班与剩余号/appointment/submitPOSTuserId, scheduleId预约成功号源减1/appointment/myListGETuserId返回当前用户全部预约记录把测试结果截图放进论文的“系统测试”章节比任何文字描述都有说服力。这套流程跑完后我对项目的信任度基本来自Postman的集合记录而不是“看着页面能点就认为没问题”。希望这个流程对你也有用。本文还有配套的精品资源点击获取
返回列表