应统一拦截响应并识别maintainnotice字段,以非阻断banner形式展示可关闭的维护公告,同时校验时效性、去重及xss防护。

在接口调用中处理服务器返回的维护公告提示,核心是**统一拦截响应,识别特定字段(如 maintainNotice 或 systemStatus),并在前端以非阻断、可关闭的方式展示**,避免干扰正常业务流程,同时确保用户知情。
1. 服务端约定返回结构
与后端协商,在所有接口的响应体中(无论成功或失败)**固定携带维护提示字段**,例如:
-
maintainNotice: null—— 无公告 -
maintainNotice: { title: "系统维护提醒", content: "今晚23:00–次日02:00将进行升级...", startTime: "2024-06-15T23:00:00", endTime: "2024-06-16T02:00:00" }—— 有公告 - 也可统一放在响应头(如
X-Maintain-Notice),但 JSON 结构更灵活,便于携带时间、链接等扩展信息
2. 在请求拦截器中统一提取并缓存公告
使用 Axios 或 Fetch 封装时,在响应拦截器中解析公告字段,避免每个接口单独处理:
- 检查响应数据中是否存在
maintainNotice字段(注意:需兼容 2xx 和非 2xx 响应) - 若存在且内容不为空,将其存入内存变量或轻量状态(如
let currentNotice = notice),避免重复弹窗 - 可加简单去重逻辑:仅当新公告的
id或startTime+endTime与当前不同才更新
3. 全局展示组件(非模态、可关闭)
维护提示不应打断用户操作(如不能用 alert 或强弹窗),推荐顶部横幅(Banner)形式:
- 组件监听全局公告状态(如通过 Context / Pinia / Vuex / 或简单事件总线)
- 显示时带「×」关闭按钮,点击后本地存储关闭状态(
localStorage.setItem('notice_closed_20240615', 'true')),并设置时效(如 2 小时内不再显示同一条) - 支持 HTML 内容(如含链接跳转至公告详情页),但需做 XSS 过滤(用
textContent渲染或白名单 DOMPurify)
4. 主动轮询 + 时间有效性判断(进阶)
维护公告常有时效性,前端需主动校验是否仍在有效期内:
- 展示前检查
new Date() >= startTime && new Date() - 可每 5 分钟调用一次轻量接口(如
/api/v1/status)拉取最新公告,避免页面长期不刷新导致提示过期 - 若公告已过期,自动清除本地缓存并隐藏 Banner
关键点在于:服务端提供稳定字段、前端统一收口、展示轻量友好、时效可控。不复杂但容易忽略细节,比如忘记处理 401/503 响应里的公告,或未做关闭状态持久化导致反复弹出。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











