
很多计算机专业的学生在选毕业设计题目时都卡在同一个问题上想做一个既能体现技术含量、又不容易翻车、还能在答辩时讲出亮点的系统。如果只是做一个普通的 CRUD 管理系统答辩时很难讲出东西如果选题太偏、技术太生僻又怕自己做不完、做不透。今天要拆解的这套“智能天气出行服务系统”正好踩在一个比较舒服的位置上它用 Spring Boot 做后端、Thymeleaf 做服务端页面渲染再接入 AI 大模型的能力来做“智能出行建议”技术栈是当前企业级 Java 开发的主流组合又在业务上加入了 AI 这个热门话题。这篇文章不只讲“这个系统有哪些界面”而是把题目背后的设计逻辑讲清楚为什么用 Spring Boot 而不是 SSM为什么页面层用 Thymeleaf 而不是前后端分离AI 大模型在系统里到底扮演什么角色以及从数据库设计、接口封装到页面渲染一条完整链路应该怎么写。读完你不仅能理解这套毕业设计的代码结构还能自己动手把核心模块跑起来并在论文和答辩环节把技术亮点讲明白。1. 这套系统到底在解决什么问题先别急着看代码我们先把业务场景讲清楚。传统的天气类网站或 App基本路径是“查天气 → 用户自己决定要不要出门”。用户看到明天有雨自己会想“那我不去爬山了改去商场”看到明天降温会想“我要加件外套”。这里面的决策链路是断开的天气数据是天气数据出行决策是出行决策中间那一步“根据天气给出合理建议”并没有被系统承接。智能天气出行服务系统的核心改进就是把这条链路补上。系统不仅能展示当天的天气状况、温度、风力、空气质量还能结合用户输入的出行计划借助 AI 大模型生成一份合理的出行建议。比如用户输入“明天想去郊区露营”系统会在拿到明天的天气数据后把“天气情况 用户计划”一起交给大模型让模型判断是否适合露营、需要带什么装备、有没有更合适的替代方案。这部分就是“智能”二字的落点也是这套毕业设计和普通天气网站拉开差距的地方。毕业设计最怕的就是“功能看着多细看全是数据库增删改查”。引入 AI 大模型之后系统的业务深度和技术话题性都会明显增强论文里也有东西可写。从实际开发角度看这个题目也很适合作为 Spring Boot 学习项目。它能覆盖 Web 层、Service 层、数据访问层、模板引擎渲染、第三方接口对接、配置管理、异常处理等多个环节难度适中又不至于太单薄。2. 技术选型分析Spring Boot、Thymeleaf 和 AI 大模型的分工这个项目的技术栈可以简单理解为三层分工。2.1 能力层AI 大模型提供“智能判断”大模型在本项目里并不是用来做“聊天机器人”的而是充当一个“决策助手”。系统把天气数据、用户出行计划、注意事项等组装成一段结构化的提示词请求大模型的接口拿到模型返回的出行建议文本再在页面上展示出来。这里需要先想清楚一个问题是本地部署大模型还是调用云端 API对于毕业设计来说更稳妥的是调用成熟的云端大模型 API。原因很直接本地部署大模型对显卡和内存要求高普通笔记本很难跑通而且校验收环境时答辩现场很难保证 GPU 资源。云端 API 只需要一个 Key在 controller 或 service 里通过 HTTP 调用即可逻辑链路简单、可控性强。至于具体接哪家模型以实际学校要求和个人资源为准代码层面只需要封装一个统一的“AI 服务接口”后续更换模型厂商不用改上层逻辑。有人可能会问如果不接大模型 API能不能做成纯规则匹配也可以比如“雨天 → 建议带伞”“降温 → 建议加衣”。但这种规则匹配本质上还是 if-else写论文的时候很难说“智能”答辩也容易被追问。大模型的价值在于它能理解自然语言能处理开放式问题。比如用户说“明天和女朋友去城市周边玩预算五百以内”这种问题用规则根本写不完但大模型可以给出一份很具体的建议。这就是这套系统选择大模型的原因。2.2 后端层Spring Boot 负责业务编排Spring Boot 在这里承担的是标准的后端职责处理 HTTP 请求、调用服务层方法、管理数据访问、统配业务逻辑。项目里可以拆出几个核心模块weather负责对接天气数据源解析天气信息。ai负责封装大模型接口调用构造提示词解析模型返回内容。travel负责出行建议相关的业务逻辑。user负责用户的注册、登录、历史记录管理。这种包结构的好处是职责清晰写论文画架构图时也方便。答辩时老师问你“系统怎么分层”“每个模块干什么”你按包结构讲一遍逻辑非常通顺。2.3 表现层Thymeleaf 完成服务端渲染很多学生现在一说到页面就默认“前后端分离、Vue Element UI”。但毕业设计里前后端分离有时反而是个坑你需要同时维护前端工程和后端工程联调成本高部署也麻烦论文里还要多写一套接口文档。Thymeleaf 是 Spring Boot 官方推荐的模板引擎它直接写在后端工程的 resources/templates 目录下后端通过 Model 把数据塞进页面页面在服务器端渲染完成后直接传给浏览器。这个模式对毕设非常友好少了一套前端工程部署时一个 Spring Boot jar 全搞定导师演示时也不用操心 Node.js 环境。Thymeleaf 还有一个特点就是页面本身是静态 HTML可以直接用浏览器打开预览样式。它的核心语法主要是几个!-- 用 th:text 输出后端传过来的变量 -- p th:text${cityName}默认城市/p !-- 用 th:each 遍历列表 -- tr th:eachitem : ${suggestions} td th:text${item}/td /tr !-- 用 th:if 做条件判断 -- div th:if${isRainy} classalert-warning 今天可能有雨记得带伞 /div这些语法学起来很快比 Vue 的双向绑定、组件通信要轻量得多。对 Java 方向的学生来说Thymeleaf 几乎是零额外负担。2.4 为什么这个技术组合适合毕业设计用一张表来对比几种常见的毕设技术方案技术方案开发成本答辩亮点翻车概率适合人群Spring Boot Thymeleaf低中低想稳扎稳打完成毕设的学生Spring Boot Vue 前后端分离高中高中高前端基础好、时间充裕的学生Spring Boot Thymeleaf AI低高低想让项目有亮点又不想太冒进的学生第三套方案就是本项目的选型。AI 负责制造话题Spring Boot 负责稳定落地Thymeleaf 负责控制成本。3. 数据库设计与核心表结构这个系统的数据量并不大但数据库设计仍然要认真做。论文里“数据库设计”章节一般要画 ER 图、写数据字典这块做得好能拉高不少分数。建议设计这几张核心表。3.1 用户表用户表用于支撑登录注册功能字段如下CREATE TABLE sys_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, username VARCHAR(64) NOT NULL UNIQUE COMMENT 用户名, password VARCHAR(128) NOT NULL COMMENT 密码BCrypt加密存储, nickname VARCHAR(64) COMMENT 昵称, email VARCHAR(128) COMMENT 邮箱, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) COMMENT 用户表;密码字段一定要加密不能用明文。Spring Security 或 Hutool 都提供 BCrypt 加密工具论文里也能写“用户密码采用 BCrypt 加密存储防止拖库后密码泄露”。3.2 天气查询记录表每次用户查询天气或生成出行建议时可以把记录落库。这张表的作用是支撑“历史记录”功能也能在论文里展示你对数据审计的理解。CREATE TABLE weather_query_log ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, user_id BIGINT COMMENT 用户ID, city VARCHAR(64) NOT NULL COMMENT 查询城市, query_date DATE NOT NULL COMMENT 查询日期, weather_info TEXT COMMENT 天气信息快照, ai_advice TEXT COMMENT AI出行建议, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) COMMENT 天气查询记录表;3.3 出行建议收藏表用户看到一条不错的出游建议后可以收藏起来。收藏功能虽然简单但它体现的是“用户交互设计”论文里可以写“通过收藏功能帮助用户沉淀高价值建议”。CREATE TABLE travel_favorite ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, user_id BIGINT NOT NULL COMMENT 用户ID, advice_content TEXT NOT NULL COMMENT 收藏的建议内容, location VARCHAR(128) COMMENT 建议地点, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 收藏时间 ) COMMENT 出行建议收藏表;数据库层面不需要搞太多表四到六张就足够了。重点是表与表之间的关联要清晰、字段命名要规范、注释要写全论文数据字典可以直接从建表语句里复制。4. 项目环境准备与初始化在写代码之前先把开发环境准备好。4.1 环境清单依赖项说明JDK8 或 17具体看你建的 Spring Boot 版本Maven3.6 以上用来管理依赖MySQL5.7 或 8.0IDEIDEA 社区版或专业版均可API Key大模型平台的 KeySpring Boot 版本建议用 2.7.x 或 3.x 中的某个稳定版本具体以你创建项目时选到的版本为准。如果用的是 JDK 8就选 Spring Boot 2.x如果 JDK 173.x 也可以。不要盲目追最新版本稳定最重要。4.2 Spring Boot 项目初始化最简单的创建方式是通过 IDEA 内置的 Spring Initializr新建 Project → Spring Initializr → 选好 JDK 版本 → 勾选依赖。需要添加的依赖包括Spring WebThymeleafSpring Data JPA 或 MyBatis Plus二选一MySQL DriverLombok可选但推荐如果你更习惯手写 pom.xml核心依赖如下!-- 文件路径pom.xml -- dependencies !-- Web 支持包含 Spring MVC -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Thymeleaf 模板引擎 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency !-- MyBatis Plus简化数据库操作 -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency !-- MySQL 驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- Hutool 工具库提高开发效率 -- dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.25/version /dependency /dependencies如果你的项目里 JPA 和 MyBatis 出现了冲突通常是两者同时引入了导致数据源初始化混乱实际项目中建议只保留一个 ORM 框架。4.3 配置文件编写application.yml主要配三块内容服务器端口、数据库连接、第三方接口地址。# 文件路径src/main/resources/application.yml server: port: 8080 spring: application: name: smart-weather-travel datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/smart_weather?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: your_password thymeleaf: cache: false prefix: classpath:/templates/ suffix: .html mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml configuration: map-underscore-to-camel-case: true # 自定义配置存放第三方接口信息 app: weather: api-url: https://api.example.com/weather api-key: your_weather_api_key ai: api-url: https://api.example.com/v1/chat/completions api-key: your_ai_api_key model: gpt-3.5-turbo实际开发中建议把不同的配置放到不同环境application-dev.yml给本地开发application-prod.yml给服务器部署。答辩演示时用 dev 配置即可。5. 核心功能与代码实现这个章节是全篇重点我会把核心链路拆成几段代码天气数据获取、AI 建议生成、后端 Controller、Thymeleaf 页面渲染以及历史记录查询。5.1 天气服务封装天气数据怎么来通常有两种方式一种是调用云厂商的天气 API另一种是本地模拟数据。对于真实项目推荐接入第三方天气 API比如和风天气、心知天气、高德天气都是常见的免费方案。这里的关键不是具体用哪家 API而是把“天气数据来源”封装成一个独立 Service。这样后续换数据源时不用改页面和控制器。定义一个天气服务接口// 文件路径src/main/java/com/example/smartweather/service/WeatherService.java public interface WeatherService { /** * 根据城市名称查询实时天气 */ WeatherResult getWeather(String city); }再写一个基于 HTTP API 的实现类// 文件路径src/main/java/com/example/smartweather/service/impl/WeatherServiceImpl.java Service public class WeatherServiceImpl implements WeatherService { Value(${app.weather.api-url}) private String apiUrl; Value(${app.weather.api-key}) private String apiKey; Override public WeatherResult getWeather(String city) { // 1. 构造请求 URL String url apiUrl ?key apiKey location city; // 2. 通过 Hutool 的 HttpUtil 发送 GET 请求 String jsonStr HttpUtil.get(url); // 3. 解析 JSON 字符串成对象 JSONObject jsonObject JSONUtil.parseObj(jsonStr); // 4. 提取需要的字段组装成业务对象 WeatherResult result new WeatherResult(); result.setCity(city); result.setTemperature(jsonObject.getStr(temp)); result.setWeather(jsonObject.getStr(text)); result.setWindDirection(jsonObject.getStr(windDir)); result.setWindScale(jsonObject.getStr(windScale)); result.setHumidity(jsonObject.getStr(humidity)); result.setUpdateTime(jsonObject.getStr(lastUpdate)); return result; } }WeatherResult可以定义为一个简单的 POJO 类包含城市、温度、天气现象、风力等字段。这个类主要作用是把第三方接口返回的差异隔离掉后续对接真实天气数据源时只需改动WeatherServiceImpl。这里容易踩的坑是部分天气 API 返回的是嵌套 JSON比如now.temp、now.text这样的结构解析的时候要看清层级关系。如果解析字段路径写错页面里就会显示空值而不是报错排查起来比较隐蔽。5.2 AI 出行建议服务AI 服务的核心逻辑是把天气信息和用户输入组织成提示词调用大模型接口拿到自然语言建议。这里我直接用一个轻量级的 HTTP 调用方式不引入 SDK保持代码简单直接。// 文件路径src/main/java/com/example/smartweather/service/AiTravelAdviceService.java Service public class AiTravelAdviceService { Value(${app.ai.api-url}) private String apiUrl; Value(${app.ai.api-key}) private String apiKey; Value(${app.ai.model}) private String model; /** * 生成出行建议 * * param weatherInfo 天气信息 * param userPlan 用户出行计划 */ public String generateAdvice(String weatherInfo, String userPlan) { // 1. 构造 Prompt String systemPrompt 你是一个专业的出行规划助手。 请根据天气信息和用户出行计划给出实用、具体的建议。 建议内容包括是否适合出行、需要做的准备、注意事项、替代方案。; String userPrompt 天气信息 weatherInfo \n 用户出行计划 userPlan; // 2. 构造请求体 JSONObject requestBody new JSONObject(); requestBody.set(model, model); JSONArray messages new JSONArray(); JSONObject systemMessage new JSONObject(); systemMessage.set(role, system); systemMessage.set(content, systemPrompt); messages.add(systemMessage); JSONObject userMessage new JSONObject(); userMessage.set(role, user); userMessage.set(content, userPrompt); messages.add(userMessage); requestBody.set(messages, messages); requestBody.set(temperature, 0.7); // 3. 发送 POST 请求 String result HttpRequest.post(apiUrl) .header(Authorization, Bearer apiKey) .header(Content-Type, application/json) .body(requestBody.toString()) .execute() .body(); // 4. 解析模型返回结果 JSONObject responseJson JSONUtil.parseObj(result); JSONArray choices responseJson.getJSONArray(choices); JSONObject firstChoice choices.getJSONObject(0); return firstChoice.getJSONObject(message).getStr(content); } }这段代码做完之后有一个地方要特别注意大模型返回的内容是纯文本如果里面带换行符渲染到 HTML 里会丢失换行。建议在 Controller 里把换行符转换成 HTML 的br标签或者在前端模板里用th:utext输出。5.3 Controller 层编排Controller 的作用是接收页面请求、调用 Service、把数据塞进 Model。// 文件路径src/main/java/com/example/smartweather/controller/TravelController.java Controller public class TravelController { Resource private WeatherService weatherService; Resource private AiTravelAdviceService aiTravelAdviceService; /** * 跳转到首页 */ GetMapping(/) public String index() { return index; } /** * 查询天气并生成出行建议 */ PostMapping(/travel/advice) public String getTravelAdvice(RequestParam String city, RequestParam String plan, Model model) { // 1. 查询天气 WeatherResult weather weatherService.getWeather(city); // 2. 生成 AI 建议 String advice aiTravelAdviceService.generateAdvice(weather.toString(), plan); // 3. 把数据放进 Model交给 Thymeleaf 渲染 model.addAttribute(city, city); model.addAttribute(weather, weather); model.addAttribute(advice, advice); model.addAttribute(plan, plan); return advice; } }这里可以看到 Thymeleaf 的典型用法Controller 返回的是模板名adviceSpring Boot 会自动去resources/templates/advice.html找到对应页面并把 Model 里的数据渲染进去。整个过程不需要写ResponseBody也不需要返回 JSON。5.4 Thymeleaf 页面渲染页面部分不需要写得特别炫酷但要做到信息清晰、展示完整。index.html是首页负责收集用户输入!DOCTYPE html !-- 文件路径src/main/resources/templates/index.html -- html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 title智能天气出行服务系统/title link relstylesheet th:href{/css/style.css} /head body div classcontainer h1智能天气出行服务/h1 p classsubtitle输入城市和出行计划AI 帮你规划更合适的一天/p form th:action{/travel/advice} methodpost div classform-group label forcity所在城市/label input typetext idcity namecity placeholder例如北京 required /div div classform-group label forplan出行计划/label textarea idplan nameplan rows4 placeholder例如明天想去郊外爬山有没有什么需要注意的 required/textarea /div button typesubmit获取出行建议/button /form /div /body /htmladvice.html是结果页!DOCTYPE html !-- 文件路径src/main/resources/templates/advice.html -- html langzh-CN xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 title出行建议结果/title /head body div classcontainer h2 th:text|${city} 出行建议|北京出行建议/h2 div classweather-panel h3实时天气/h3 p天气span th:text${weather.weather}晴/span/p p温度span th:text${weather.temperature}20°C/span/p p湿度span th:text${weather.humidity}40%/span/p p风向span th:text${weather.windDirection}南风/span/p /div div classadvice-panel h3AI 出行建议/h3 div classadvice-content th:utext${advice}/div /div a th:href{/}重新查询/a /div /body /htmlth:utext会把 AI 返回的文本当作 HTML 内容输出这样 AI 返回的换行符可以被正确渲染成段落。但要注意如果用th:utext必须确保后端对内容做了转换避免把未过滤的 HTML 直接输出。5.5 历史记录与收藏功能历史记录功能可以增强系统的完整度。每次用户查询后把天气和 AI 建议保存到weather_query_log表。用户登录后打开“历史记录”页面可以看到之前查过的所有记录。// 文件路径src/main/java/com/example/smartweather/service/QueryLogService.java Service public class QueryLogService { Resource private WeatherQueryLogMapper logMapper; public void saveLog(Long userId, String city, String weatherInfo, String aiAdvice) { WeatherQueryLog log new WeatherQueryLog(); log.setUserId(userId); log.setCity(city); log.setQueryDate(LocalDate.now()); log.setWeatherInfo(weatherInfo); log.setAiAdvice(aiAdvice); logMapper.insert(log); } }这个功能本身不复杂但它能让系统从“一个接口演示页面”变成“一个完整的带用户操作闭环的系统”在论文“功能模块设计”和“系统测试”环节能填充不少内容。6. 运行与验证代码写到这个程度系统的基本链路已经通了。下面是运行和验证步骤。6.1 启动项目在 IDEA 里直接运行主类SmartWeatherApplication也可以命令行启动mvn spring-boot:run启动成功后控制台会出现 Spring Boot 的日志横幅并提示Tomcat started on port(s): 8080。6.2 打开页面并测试浏览器访问http://localhost:8080/可以看到首页。在输入框里填城市和出行计划点击“获取出行建议”观察以下内容页面是否正常显示城市天气信息。AI 建议是否返回合理内容。历史记录表weather_query_log是否新增了记录。如果 AI 建议迟迟不返回第一步去控制台看日志是大模型 API 超时、Key 无效还是请求参数格式不对。这三个问题各对应不同的提示信息。6.3 接口测试如果后端写了 REST 接口也可以用 Postman 或 curl 单独测试接口。curl -X POST http://localhost:8080/travel/advice \ -d city北京plan明天想去故宫需要带什么不过注意这个接口返回的是 HTML 页面不是 JSON。如果你需要接口返回 JSON那就要另写RestController接口。毕设系统里两种方式可以共存页面走Controller给移动端或演示用的接口走RestController。7. 常见问题与排查思路在开发或者答辩演示过程中有几类问题出现频率很高提前列出来遇到时直接对标排查。问题现象可能原因排查方式解决方案启动报Failed to configure a DataSource数据库未创建或配置不对检查 MySQL 是否启动database是否已创建先建库smart_weather再核对账号密码页面渲染出原始 HTML 标签后端返回内容包含br等标签但模板用了th:text查看页面源码换成th:utext大模型接口调用超时网络不通或 API Key 无效在浏览器直接调用一次 API 地址检查 Key 和网络打印完整的响应日志天气数据显示空值JSON 解析层级不对打印第三方接口的原始 JSON调整getStr路径比如now.tempThymeleaf 模板修改后不生效缓存未关闭检查配置文件spring.thymeleaf.cachefalse重启项目MyBatis Plus 查询结果为 null实体类字段和表字段下划线映射没开启检查配置map-underscore-to-camel-case设置为 true或使用TableField指定其中“大模型接口超时”是演示现场最怕发生的意外。建议提前准备一份固定的建议文本作为本地兜底一旦 AI 调用失败可以自动降级到本地默认建议。这样即使现场网络出问题功能也不会“白屏”。8. 毕业设计落地建议从能跑到能答辩代码跑通只是第一步毕业设计更重要的是把它“讲出来”和“写出来”。几个建议供参考。8.1 论文结构怎么排论文目录可以按以下顺序组织绪论背景、意义、国内外研究现状。相关技术介绍Spring Boot、Thymeleaf、AI 大模型。系统分析可行性分析、需求分析、用例图。系统设计架构图、功能模块图、数据库 ER 图、表设计。系统实现分模块贴核心代码、截图。系统测试功能测试用例、结果分析。总结与展望。8.2 答辩时怎么讲 AI 部分这是很多同学的盲区。答辩时老师可能不关心你页面多好看但一定会问“AI 是怎么接入的”。你可以按这个逻辑讲抽象接口系统先定义了一个统一的 AI 服务接口。提示词工程把天气信息和用户计划组织成结构化的 Prompt。调用与解析通过 HTTP 调用大模型 API解析返回内容。降级兜底接口异常时回退到本地规则建议。这样讲老师能听出你对“AI 集成”有完整理解而不是只加了一个“看起来能聊天的框”。8.3 答辩时可能会被追问的问题提前想一想这几个问题为什么用大模型而不是直接天气接口给建议大模型返回建议不稳定怎么办多用户并发请求大模型接口会不会卡顿如果用户输入恶意内容你会怎么处理不要求回答得多深但要能说出自己的思考。比如并发问题可以回答“当前版本是同步调用后续可以引入消息队列做异步化”恶意输入问题可以回答“可以在接入层增加参数校验和敏感词过滤”。不需要你真的实现但要让老师看到你有工程思维。8.4 源码、LW、PPT 怎么配合使用这套项目附带的三件套各有分工。源码是要“能跑起来”LW论文文档是要“能讲清楚设计过程”PPT 是答辩的提词器。建议拿到项目后的第一步不是打开 PPT而是先把源码的启动流程跑通。先跑通、再看代码结构、再对着 LW 改写成自己的表达。毕业设计评审最看重的是“你对自己项目的掌握程度”不管你用的是不是别人的源码能讲清楚核心类、核心流程、核心数据库表才是关键。不建议直接拿原封不动的 LW 和 PPT 交差尽量把自己的理解融入进去改成符合自己表达习惯的版本。这样做一方面能降低查重风险另一方面也更能经得起答辩追问。9. 总结与后续学习方向这个项目用 Spring Boot 做后端、Thymeleaf 做页面渲染、大模型 API 做智能出行建议技术链路短、落地成本低、答辩亮点足。整个系统的核心不复杂天气接口解决“数据怎么来”大模型解决“建议怎么给”Thymeleaf 解决“页面怎么渲染”Spring Boot 解决“链路怎么串”。如果你准备做这个题目下一步可以按这个顺序推进先启动项目看效果 → 拆解包结构和数据库 → 改掉你不满意的部分 → 补充一个自己加的功能 → 按照自己的语言重写 LW → 做答辩 PPT。不要一开始就陷在“怎么改界面”里先让系统在自己电脑上跑起来再逐步理解每一个环节。如果想继续加深可以从这几个方向入手把同步调用大模型改成异步任务、给 AI 提示词做缓存策略、接入 Redis 缓存天气数据、加上基于用户历史行为的个性化推荐。每一条都能成为一个亮点写在“后续展望”里也顺理成章。毕设这件事不求做成产品级系统但求做成“能讲清楚、能演示、经得起提问”的完整闭环。这套技术组合恰好能帮你把这三件事都做到。