news 2026/8/6 20:30:03

旅行分享平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
旅行分享平台

Discovery 旅行分享平台

本文全面介绍Discovery 旅行分享平台的系统架构、核心功能模块与使用方式,涵盖前台用户功能、后台管理系统、AI 攻略助手深度解析,帮助读者快速了解平台能力与技术实现。


一、项目简介

Discovery是一个前后端分离的现代化旅行分享社区平台。用户可以发布图文笔记、浏览精美旅行图片、通过AI 攻略助手获取个性化旅行建议,还支持点赞 / 收藏 / 评论 / 关注等社交互动。平台配备完善的后台管理系统,实现内容审核与用户管控。

项目仓库结构如下:

Discovery-os/ ├── code/ │ ├── springboot-Discovery-os/ # 后端工程(Spring Boot 3.5 + Java 21) │ └── vue-Discovery-os/ # 前端工程(Vue 3 + Vite + Element Plus) └── docker/ ├── postgres-backup.tar # PostgreSQL Docker 镜像(已集成 zhparser + pg_cron) ├── redis-backup.tar # Redis Docker 镜像 ├── postgres-dump.sql # 数据库数据导出文件 └── readme.txt # Docker 操作说明

核心价值

  • AI 赋能,智能攻略推荐:平台深度集成了 DeepSeek 大语言模型,用户只需输入旅行目的地关键词,AI 便会以 SSE 流式传输实时生成结构化旅行攻略——涵盖推荐路线、必打卡景点、地方美食、注意事项等,打字机效果逐字输出,体验流畅自然。后端通过 System Prompt 约束 AI 仅回答旅游领域问题,非旅游内容礼貌拒绝,保证内容专业性。这一功能将大模型的通用能力精准落地到旅行规划场景,显著提升了平台的信息价值与用户粘性,也是 SSE 流式通信在实际业务中的典型应用案例

  • 技术栈主流且较新,学习与复用价值高:项目采用Spring Boot 3.5 + Java 21 + Vue 3 + Vite作为前后端核心框架,搭配PostgreSQL(含 zhparser 中文分词扩展)作为主数据库、Redis作为分布式缓存、Docker进行容器化部署。这套技术选型既是当前企业级开发的主流组合——Spring Boot + Vue + Redis + PostgreSQL + Docker 几乎是中小型 Web 项目的"标配五件套",又保持了较新的版本号(Java 21 LTS、Spring Boot 3.5、Vue 3.5),无论是作为学习参考还是二次开发基础,都具有很高的通用性和实用价值。前后端分离、JWT 认证、MyBatis 持久层、Caffeine 本地缓存等实践均为企业开发中的标准做法,适合作为全栈项目学习模板

  • UI 界面简洁合理,注重用户体验:前端采用 Element Plus 企业级组件库,整体视觉风格清爽现代。发现页面采用响应式瀑布流布局(1~6 列自适应屏幕宽度),图片懒加载 + 无限滚动保证浏览流畅;AI 攻略区域配备骨架屏加载占位,首字到达前不会空白等待;笔记详情弹窗集成图片轮播、Markdown 正文渲染、多级评论区;用户中心支持头像裁剪上传。每个页面的交互设计都围绕"减少操作步骤、提升信息获取效率"展开——瀑布流一屏多图、弹窗替代跳页、toggle 接口一键切换状态,整体使用体验简洁而不简陋

  • 工程化架构设计:前后端分离架构、JWT 无状态认证、Redis 缓存降级机制(Redis 不可用时自动回退数据库)、事务保护回滚(图片上传失败自动清理)、pg_cron 定时任务清理历史数据、全局异常处理与统一响应格式——每一层都体现了规范的工程化实践,具备良好的可维护性与可扩展性

  • 完整功能闭环:从用户注册登录、内容发布、审核管理、社交互动到 AI 智能推荐,平台覆盖了内容社区的完整生命周期,形成"创作 → 审核 → 展示 → 互动 → 推荐"的闭环体验,每个环节功能完整、可用

  • 全端适配:一套代码适配手机、平板、桌面端,响应式布局自动适配不同屏幕尺寸

  • 后台管理:完善的用户管理与内容审核系统,支持账号状态管控、帖子审核流、认证达人标识等运营能力

  • 中文全文检索:PostgreSQL + zhparser 中文分词 + GIN 索引,实现高质量的中文笔记全文搜索


二、技术栈总览

前端技术栈

技术版本说明
Vue 33.5.22Composition API
Vite7.1.11基于 ESM 的构建工具
Vue Router4.6.3SPA 路由管理
Element Plus2.11.5企业级 UI 组件库
Axios1.13.5HTTP 请求封装
Markdown-it14.1.1Markdown 解析渲染
Vue Cropper1.1.4头像裁剪组件
OpenAI SDK6.29.0AI 能力集成

后端技术栈

技术版本说明
Spring Boot3.5.7核心框架
Java21编译与运行环境
Spring Security6.x认证与授权
MyBatis3.0.5持久层框架
PageHelper1.4.6分页插件
java-jwt4.3.0JWT 令牌签发与校验
Hutool5.8.18Java 工具库
OkHttp + okhttp-sse4.12.0HTTP 客户端 & SSE 流式支持
Caffeine3.1.8本地缓存

基础设施

组件版本说明
PostgreSQL12+主数据库,需zhparser中文分词 +pg_cron定时任务扩展
Redis6+分布式缓存,Lettuce 连接池
Docker-容器化部署 PG 与 Redis

三、系统总体架构

Discovery 平台采用经典的前后端分离架构,通过 Docker 容器化中间件,实现开发环境与生产环境的一致性。

┌─────────────────────────────────────────────┐ │ 浏览器客户端 │ │ (手机 / 平板 / 桌面端) │ └──────────────────────┬──────────────────────┘ │ HTTP / SSE ▼ ┌──────────────────────────────────────────────────────────────────────┐ │ 前端层 (Vue 3 + Vite) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │ │ 发现页面 │ │ 收藏页面 │ │ 上传页面 │ │ 用户中心 │ │ 后台管理│ │ │ │ +AI 助手 │ │ +浏览历史 │ │ +图片预览 │ │ +头像裁剪 │ │ 审核用户│ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘ │ │ │ │ Axios 请求封装 (拦截器 / Token 自动注入 / 401 自动跳转登录) │ └──────────────────────────────┬───────────────────────────────────────┘ │ RESTful API + SSE 流 ▼ ┌──────────────────────────────────────────────────────────────────────┐ │ 后端层 (Spring Boot 3.5 + Java 21) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ │ │用户模块 │ │笔记模块 │ │互动模块 │ │评论模块 │ │ AI 助手 │ │ │ │JWT 认证 │ │全文检索 │ │toggle │ │树形结构 │ │DeepSeek │ │ │ │角色控制 │ │审核流 │ │接口 │ │ │ │SSE 流式 │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └──────────┘ │ │ │ │ Spring Security 认证过滤器 → Controller → Service → MyBatis Mapper │ │ 全局异常处理 + 统一响应 Result + Caffeine 本地缓存 │ └──────────┬─────────────────────────────────┬─────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ PostgreSQL 12+ │ │ Redis 6+ │ │ │ │ │ │ 8 张核心业务表 │ │ 分布式缓存 │ │ zhparser 中文分词 │ │ Lettuce 连接池 │ │ GIN 全文检索索引 │ │ 降级回退 DB 查询 │ │ pg_cron 定时清理 │ │ │ │ UUIDv7 主键 │ │ │ └─────────────────────┘ └─────────────────────┘ │ │ └────────── Docker 容器 ──────────┘

架构亮点

设计说明
前后端分离Vue 前端通过 Vite 代理/api转发至 Spring Boot 后端,开发与部署完全解耦
JWT 无状态认证登录返回 Token,前端 Axios 拦截器自动注入请求头,后端过滤器统一校验,无需 Session
SSE 流式 AI后端 SseEmitter 转发 DeepSeek 流式响应,前端 ReadableStream 逐字读取,实现打字机效果
缓存降级Redis 不可用时自动回退到数据库查询,保障核心功能可用
定时任务pg_cron 每日自动清理 30 天前的浏览历史,无需额外调度系统
容器化PostgreSQL(含扩展)和 Redis 预构建为 Docker 镜像,一条命令启动全套基础设施

四、核心功能模块

4.1 前台功能

发现页面(首页)/discovery
  • AI 攻略助手:根据搜索关键词生成个性化旅行建议,SSE 流式传输 + 打字机效果
  • 全局搜索:关键词模糊匹配,实时过滤
  • 瀑布流展示:响应式网格(1~6 列自适应)
  • 无限滚动:IntersectionObserver 触底自动加载
  • 详情预览:图片轮播、Markdown 渲染、点赞 / 评论 / 收藏 / 分享


收藏页面/collection
  • 我的收藏列表(NoteGrid 组件统一展示)
  • 浏览历史记录与清除
  • 点击卡片查看详情

上传页面/upload
  • 拖拽 / 点击上传图片
  • 实时缩略图预览
  • 多图上传(JPG/PNG/GIF/WebP,单张 ≤ 20MB)
  • 标题 / 位置 / 内容描述元信息编辑
  • 上传失败事务回滚

用户中心/user
  • 头像裁剪上传(Vue Cropper)
  • 个人资料编辑(昵称、邮箱、手机号、简介、性别、生日)
  • 粉丝 / 关注数据统计与列表
  • 我的动态(NoteGrid 展示)
  • 密码修改

登录 / 注册/login/register
  • 手机号 + 密码登录
  • 注册表单验证
  • 路由守卫(白名单:/login、/register、/discovery 免登录)

4.2 后台管理系统

项目包含两套独立布局的后台管理页面,直接通过 URL 访问:

功能访问地址
帖子管理(内容审核)http://localhost:5173/postManagement
用户管理(账号管控)http://localhost:5173/userManagement

用户管理功能:分页列表、手机号搜索、账号状态管理(正常/冻结/永久封禁)、密码重置、批量删除、认证达人标识。

帖子管理功能:待审核笔记列表、图片预览(多图轮播)、审核通过/拒绝、拒绝理由输入、关键词搜索。

【建议截图 9】:用户管理后台——展示用户列表表格 + 状态管理操作。

【建议截图 10】:帖子管理后台——展示待审核笔记卡片 + 审核操作按钮。

4.3 后端核心能力

模块关键能力
用户模块JWT 认证、角色控制(普通用户 / 审核员 / 管理员)
笔记模块图文发布、级联删除、审核流、zhparser 中文全文检索
互动模块点赞 / 收藏 / 关注,统一toggle接口
评论模块多级评论(树形结构)
浏览历史去重记录、pg_cron 每日自动清理 30 天前数据
AI 助手DeepSeek 旅行规划,SSE 流式输出
媒体资源图片本地存储、按笔记聚合查询

4.4 数据库设计

核心数据表(UUIDv7 主键):

表名说明
users用户(手机号/邮箱唯一,含角色、状态、达人标识)
posts笔记(含search_vector全文检索向量,触发器维护)
collections收藏(UNIQUE(user_id, post_id)
likes点赞(UNIQUE(user_id, target_id, target_type)
comments评论(支持parent_id多级树形)
follows关注(UNIQUE(follower_id, following_id)
media_resources媒体资源(图片/视频 URL)
posts_histories浏览历史(UNIQUE(user_id, post_id)

【建议截图 11】:数据库表关系 ER 图——可以用工具(如 DataGrip、Navicat)导出表关系图,帮助读者理解数据模型。

4.5 AI 攻略助手深度解析(DeepSeek 集成)

AI 攻略助手是本项目最具亮点的功能模块。平台后端集成了DeepSeek 大语言模型,用户在搜索栏输入旅行目的地关键词后,AI 会根据关键词生成结构化的个性化旅行攻略,包括推荐路线、必打卡景点、地方美食、注意事项等,帮助用户快速规划行程。

4.5.1 整体架构

AI 攻略助手采用“前端流式读取 → 后端 SSE 转发 → DeepSeek API”的三层链路,实现实时打字机效果:

用户输入关键词 "云南" │ ▼ ┌──────────────┐ POST /api/AI/travel-advice ┌──────────────────┐ │ Vue 前端 │ ──────────────────────────────────▶ │ Spring Boot │ │ discovery │ fetch + ReadableStream │ AiController │ │ .vue │ ◀────────────────────────────────── │ SseEmitter │ │ │ SSE: data: {chunk} 逐段推送 │ │ │ └──────────────┘ └───────┼──────────┘ │ okhttp-sse 流式请求 │ ▼ ┌──────────────────┐ │ DeepSeek API │ │ chat/completions│ │ (stream: true) │ └──────────────────┘

为什么不在前端直接调用 DeepSeek?

  1. 密钥安全:API Key 保存在后端配置中,不暴露给前端
  2. 灵活控制:后端注入 System Prompt 约束 AI 角色为"旅游攻略小助手",并实现登录校验、重试机制、错误兜底
4.5.2 后端实现

后端通过AiController+AiServiceDeepseek两层完成 AI 调用与 SSE 流式转发,核心流程如下:

// Controller 层:JWT 校验 → 创建 SseEmitter → 异步调用 Service@PostMapping(value="/travel-advice",produces=TEXT_EVENT_STREAM_VALUE)publicSseEmittergetTravelAdvice(@RequestBodyAiRequestrequest){TokenUtils.getCurrentUserId();// 1. 登录校验SseEmitteremitter=newSseEmitter(0L);// 2. 创建不超时的 SSE 流newThread(()->aiServiceDeepseek.getTravelAdviceStream(request.getQuestion(),emitter)).start();// 3. 异步调用returnemitter;}// Service 层:okhttp-sse EventSourceListener 监听 DeepSeek 流式响应// → 提取 choices[0].delta.content → emitter.send() 转发给前端

关键设计点:

  • SseEmitter:Spring 原生 SSE 支持,produces = TEXT_EVENT_STREAM_VALUE声明流式响应
  • okhttp-sse:EventSourceListener 监听 DeepSeek 的data:事件,逐段提取delta.content转发
  • 重试机制:遇到 429 速率限制或网络异常时,最多重试 30 次,间隔 100ms
  • System Prompt:后端注入角色约束,AI 仅回答旅游问题,非旅游内容礼貌拒绝
4.5.3 前端实现

前端在discovery.vue中通过fetch+ReadableStream读取 SSE 流,实现打字机效果:

constresponse=awaitfetch('/api/AI/travel-advice',{method:'POST',headers:{'Content-Type':'application/json','Authorization':`Bearer${token}`},body:JSON.stringify({question:searchKeyword.value}),signal:aiAbortController.signal// 切换关键词时自动取消上一次请求})constreader=response.body.getReader()// 逐段读取 SSE 数据 → accumulated 累积拼接 → 实时更新 aiResponse → markdown-it 渲染为富文本

关键设计:

  • AbortController:用户切换关键词时自动取消上一次 AI 请求,避免响应错乱
  • 骨架屏:首字到达前通过el-skeleton展示加载占位,消除空白等待
  • Markdown 实时渲染markdown-it将 AI 输出的 Markdown 文本实时渲染为结构化富文本(标题、列表、加粗等)
  • 刷新重生成:攻略区域提供刷新按钮,可对同一关键词重新获取攻略
4.5.4 功能亮点总结
特性实现方式效果
流式实时输出后端 SseEmitter + okhttp-sse;前端 fetch + ReadableStream打字机效果,逐字显示,无需等待全部生成
Markdown 富文本前端 markdown-it 实时渲染攻略内容结构化展示(标题、列表、加粗等)
角色约束后端注入 System Prompt 限定旅游领域AI 只回答旅游相关问题,非旅游内容礼貌拒绝
登录校验Controller 层 JWT 校验未登录用户无法使用,保障 API 安全
请求取消前端 AbortController + 后端独立线程用户切换关键词时自动取消上一次请求
自动重试后端最多 30 次重试,100ms 间隔应对 DeepSeek API 429 速率限制和网络波动
错误兜底后端 try-catch + SSE error;前端 ElMessage 提示网络异常或 AI 不可用时用户友好提示
骨架屏加载Element Plus el-skeleton首字到达前展示加载占位,提升体验
刷新重生成刷新按钮重新调用 AI对同一关键词可重新获取攻略

配置说明:DeepSeek 参数在application.yml中配置(api-keymodeltemperature: 1.3stream: true),API Key 前往 DeepSeek 开放平台 申请,新用户有免费额度。

【建议截图 AI-1】:在此处放置一张完整的 AI 交互流程图,帮助读者理解数据流向。

【建议截图 AI-2】:用 Postman 或 curl 调用接口展示 SSE 原始数据流。

【建议截图 AI-3】:后端控制台 AI 调用日志截图。

【建议截图 AI-4】:DeepSeek 开放平台控制台截图——展示 API Key 创建页面和余额信息。

【建议截图 AI-5】:在发现页面输入旅行目的地(如"云南"),截图展示 AI 生成的完整攻略内容(Markdown 渲染后的效果)。

【建议截图 AI-6】:AI 打字机效果动图/GIF——录制逐字输出的动态过程。

【建议截图 AI-7】(可选):输入非旅游关键词,截图展示 AI 礼貌拒绝的回答。


五、项目结构

5.1 前端结构

vue-Discovery-os/ ├── public/ # 静态资源 ├── src/ │ ├── assets/ # 样式与图片资源 │ ├── components/ # 公共组件 │ │ ├── LazyImage.vue # 图片懒加载(IntersectionObserver) │ │ ├── NoteGrid.vue # 瀑布流卡片网格 │ │ └── PostDetailDialog.vue # 帖子详情弹窗 │ ├── router/index.js # 路由定义与守卫 │ ├── utils/request.js # Axios 请求封装(拦截器/重试/Token) │ ├── views/ │ │ ├── layout/index.vue # 主布局(导航 + 侧边栏) │ │ ├── discovery/discovery.vue # 首页 + AI 助手 │ │ ├── collection/collection.vue # 收藏与历史 │ │ ├── upload/upload.vue # 内容发布 │ │ ├── user/user.vue # 用户中心 │ │ ├── login/login.vue # 登录 │ │ ├── register/register.vue # 注册 │ │ ├── postManagement/ # 后台帖子审核(独立布局) │ │ └── userManagement/ # 后台用户管理(独立布局) │ ├── App.vue │ └── main.js ├── .env # 环境变量(VITE_API_BASE_URL) ├── vite.config.js # Vite 配置(代理 /api → 后端) └── package.json

5.2 后端结构

springboot-Discovery-os/ ├── src/main/java/com/travel/ │ ├── SpringbootTravelApplication.java # 启动类(@MapperScan + @EnableCaching) │ ├── common/ # CORS、JWT 过滤器、统一响应 Result │ ├── config/ # Redis、Security 配置类 │ ├── controller/ # REST API 控制器 │ ├── entity/ # 实体类与 DTO │ ├── exception/ # 自定义异常 + 全局异常处理 │ ├── mapper/ # MyBatis Mapper 接口 │ ├── service/ # 业务逻辑层 │ └── utils/ # 本地文件存储、Token 工具 ├── src/main/resources/ │ ├── mapper/ # MyBatis XML 映射文件 │ └── application.yml # 应用配置 ├── src/sql/ # 建表与扩展初始化脚本 └── pom.xml

六、API 接口速览

认证方式

除公开接口外,所有接口需在请求头携带 JWT Token:

Authorization: Bearer <token>

公开接口(免 Token):POST /users/loginPOST /users/registerGET /posts/searchByKeywordGET /media/selectPostPhotosGET /comments/selectByPostId

核心接口

模块方法路径说明
用户POST/users/login登录获取 Token
用户POST/users/register注册
笔记POST/posts/upload发布笔记
笔记GET/posts/searchByKeyword中文全文检索
收藏POST/collections/toggle切换收藏
点赞POST/likes/toggle切换点赞
关注POST/follows/toggle切换关注
评论POST/comments/add发表评论
媒体POST/media/uploadPhotos上传图片
AIPOST/AI/travel-adviceAI 旅行建议(SSE 流式)
历史GET/postsHistories/getByUserId浏览历史

统一响应格式

{"code":"200","message":"success","data":{}}

七、功能使用指南

7.1 用户注册与登录

  1. 访问http://localhost:5173,系统默认进入发现页面(免登录浏览)
  2. 点击右上角「登录」按钮,进入登录页面
  3. 新用户点击「注册」链接,填写手机号、密码等信息完成注册
  4. 已有账号直接输入手机号 + 密码登录
  5. 登录成功后自动跳转回发现页面,右上角显示用户头像

路由白名单/login/register/discovery三个页面无需登录即可访问,其余页面需要登录后才能进入。

7.2 发现与浏览

  • 浏览笔记:发现页面以瀑布流形式展示所有已审核通过的旅行笔记,向下滚动自动加载更多
  • 搜索笔记:在顶部搜索框输入关键词(如城市名、景点名),实时过滤匹配的笔记
  • 查看详情:点击任意笔记卡片,弹出详情弹窗,展示完整图片轮播、正文内容、评论区
  • 浏览历史:系统自动记录你浏览过的笔记,可在收藏页面的「浏览历史」标签页查看

7.3 AI 攻略助手

  1. 在发现页面搜索框中输入旅行目的地关键词(如"云南"“成都”“三亚”)
  2. 点击搜索后,AI 攻略助手区域自动激活
  3. AI 会以打字机效果逐字输出个性化旅行攻略,内容包括:
    • 推荐游览路线
    • 必打卡景点介绍
    • 地方特色美食推荐
    • 旅行注意事项与建议
  4. 攻略内容以Markdown 富文本格式渲染,结构清晰可读
  5. 点击攻略区域右上角的刷新按钮,可对同一关键词重新生成攻略
  6. 切换关键词搜索时,系统自动取消上一次 AI 请求

使用提示

  • AI 攻略助手需要登录后才能使用
  • AI 仅回答旅游相关问题,输入非旅游关键词会收到礼貌拒绝
  • 如果网络不稳定,后端会自动重试最多 30 次

7.4 发布笔记

  1. 登录后点击导航栏的「上传」按钮,进入上传页面
  2. 上传图片:将图片拖拽到上传区域,或点击区域选择文件
    • 支持 JPG / PNG / GIF / WebP 格式
    • 单张图片不超过 20MB
    • 可上传多张图片,已上传的图片显示缩略图预览
  3. 填写信息
    • 标题(必填)
    • 位置(旅行地点)
    • 内容描述(支持 Markdown 格式)
  4. 点击「发布」按钮提交
  5. 笔记提交后进入待审核状态,需管理员审核通过后才会在发现页面展示

事务保护:如果图片上传成功但笔记创建失败,系统会自动回滚已上传的图片,避免产生孤立文件。

7.5 互动功能

在笔记详情弹窗中可以进行以下互动:

操作说明
点赞点击爱心图标,再次点击取消点赞
收藏点击收藏图标,收藏的笔记在「我的收藏」页面可查看
评论在评论区输入文字并发表,支持多级回复(树形结构)
关注作者在详情弹窗中点击作者头像旁的「关注」按钮
分享点击分享图标可复制笔记链接

7.6 个人中心

登录后点击右上角头像 → 进入用户中心/user

  • 编辑资料:修改昵称、邮箱、手机号、简介、性别、生日
  • 头像设置:点击头像区域,使用 Vue Cropper 裁剪并上传新头像
  • 修改密码:在安全设置中修改登录密码
  • 关注/粉丝:查看关注列表和粉丝列表,数据统计一目了然
  • 我的动态:查看自己发布的所有笔记(NoteGrid 展示)

7.7 后台管理

管理员和审核员可通过以下地址访问后台管理页面:

帖子审核/postManagement
  1. 打开http://localhost:5173/postManagement
  2. 页面展示所有待审核的笔记卡片
  3. 点击卡片可预览笔记详情(含多图轮播)
  4. 审核通过:点击「通过」按钮,笔记即可在前台展示
  5. 审核拒绝:点击「拒绝」按钮,输入拒绝理由,笔记作者将收到反馈
  6. 搜索筛选:通过关键词搜索特定待审核笔记
用户管理/userManagement
  1. 打开http://localhost:5173/userManagement
  2. 页面展示所有注册用户的分页列表
  3. 搜索用户:通过手机号精确查找用户
  4. 账号状态管理
    • 正常:用户可正常登录使用
    • 冻结:临时封禁,用户无法登录
    • 永久封禁:永久封禁账号
  5. 密码重置:为用户重置默认密码
  6. 批量删除:勾选多个用户进行批量删除
  7. 认证达人:为用户设置/取消「认证达人」标识

八、常见问题

Q1:AI 攻略助手无法使用?
A:检查application.ymldeepseek.api-key是否已填写、网络是否通畅、API 额度是否充足。AI 不可用不影响平台其他功能。

Q2:图片上传失败?
A:确认file.upload.dir目录存在且有写权限,磁盘空间充足,单文件 ≤ 20MB。

Q3:前端页面白屏 / 接口 404?
A:检查.envVITE_API_BASE_URL是否指向正确的后端地址(默认http://localhost:8090),确认后端服务已启动。

Q4:Token 过期怎么处理?
A:前端响应拦截器会自动检测 401/403 状态码,清除 LocalStorage 并跳转登录页。Token 有效期 10 小时,过期后重新登录即可。

Q5:发布的笔记在发现页面看不到?
A:新发布的笔记需要经过管理员审核通过后才会展示在前台。请前往/postManagement查看审核状态。

Q6:Redis 连接报错?
A:后端有降级逻辑——即使 Redis 不可用,也会自动回退到数据库查询,不影响核心功能。


九、总结

本项目展示了如何使用Spring Boot + Vue + Docker构建一个完整的旅行分享社区平台。平台涵盖发现浏览、AI 攻略助手、内容发布、社交互动、后台管理等完整功能闭环,并通过 DeepSeek 大模型集成实现了智能化的旅行攻略推荐。

技术选型上,Spring Boot 3.5 + Java 21 + Vue 3 + PostgreSQL + Redis + Docker 的组合既是当前企业级开发的主流方案,又保持了较新的版本,兼顾了学习参考价值与工程实用性。AI 攻略助手通过后端 SSE 转发 + 前端流式读取的方式实现了打字机效果,是 SSE 流式通信在实际项目中的典型应用案例。

核心功能一览

功能模块核心能力
发现页面瀑布流展示、全局搜索、无限滚动、笔记详情
AI 攻略助手DeepSeek 集成、SSE 流式输出、打字机效果、Markdown 渲染
内容发布拖拽上传、多图预览、事务保护、审核流程
社交互动点赞、收藏、评论(多级树形)、关注作者
用户中心资料编辑、头像裁剪、关注/粉丝、我的动态
后台管理帖子审核、用户管理、状态管控、密码重置
数据检索zhparser 中文分词、GIN 索引全文检索
浏览历史自动记录、pg_cron 定时清理、去重存储

作者:Yu
邮箱:Yuan.jiajun2020@outlook.com

如果这个项目对你有帮助,欢迎点赞收藏!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 20:27:24

408数据结构速成秘籍:一招搞定考研算法实战痛点

408数据结构速成秘籍&#xff1a;一招搞定考研算法实战痛点 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验&#xff0c;资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408 痛点直击&#xff1a;你是不是每次看到数据结构代码题…

作者头像 李华
网站建设 2026/8/6 20:26:38

Unity Animator状态机在VR交互动画中的核心应用与优化实践

1. 项目概述&#xff1a;为什么VR动画离不开Animator状态机&#xff1f;如果你正在用Unity做VR项目&#xff0c;尤其是涉及到角色交互、环境互动这类需要丰富动画表现的内容&#xff0c;那么Animator控制器和状态机绝对是你绕不开的核心工具。这不仅仅是“播放一个动画”那么简…

作者头像 李华
网站建设 2026/8/6 20:25:22

【题解】[COCI 2024/2025 #2] 流明 / Blistavost

P11432 [COCI 2024/2025 #2] 流明 / Blistavost - 洛谷 (luogu.com.cn) 这题名字很好听哦。璀璨流明 / 流明水晶像是小马宝莉里哪匹小马的名字。 注意到数据范围&#xff0c;时间复杂度不可能带 log&#xff0c;初步判断是 做法。 考虑最优情况&#xff1a; 第一&#xff0…

作者头像 李华
网站建设 2026/8/6 20:24:43

单片机毕业设计-基于 51/STM32 单片机的多模式家居环境智能监测装置设计 基于 51/STM32 单片机的定时自动家居通风遮光控制系统研究(011502)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/6 20:22:24

【单片机毕业设计】基于 51/STM32 单片机的舵机窗帘智能启闭控制系统实现 基于 51/STM32 单片机的温湿度光照一体化监测调控平台(011502)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华