Spring MVC相关知识在spring ai agent项目应用

6 阅读2分钟

大学牲学习记录,佬可滑走。

一、 Spring MVC Request Response

1. HttpServletRequest / HttpServletResponse 从哪来?

  • 客户端发起 HTTP 请求, Tomcat 容器自动创建一对原生对象:

    • HttpServletRequest: 封装请求数据 (请求头、请求体、参数、cookie)
    • HttpServletResponse: 封装响应上下文(响应头、响应流、连接状态)
  • SpringMVC 拦截请求后,自动注入到 Controller 方法入参;

2.Response 在ai项目流式响应的应用

在 AI Agent 流式接口中,手动设置 SSE 协议必备响应头

response.setContentType("text/event-stream"); // 声明SSE事件流
response.setHeader("Connection", "keep-alive"); // 维持长连接
response.setHeader("Cache-Control", "no-cache"); // 禁止缓存

作用:告诉浏览器,当前不是普通一次性接口,而是长连接流式推送

二、ResponseBodyEmitter

1.是什么?

SpringMVC 提供的异步流式响应组件,用于打破一次性响应,实现长连接、分段推送给数据。 核心工作原理?

2. 核心工作原理

  1. Controller 方法直接返回 ResponseBodyEmitter 对象
  2. Spring 接收该对象,暂时不关闭 HTTP 连接,挂起响应;
  3. 业务层 / 异步线程中,通过 emitter.send() 分段、实时推送数据
  4. 全部执行完毕调用 emitter.complete(),正常关闭连接;异常则 completeWithError()

3. 关键特性

  • 接口主线程立即释放,不会阻塞 Tomcat 线程;

  • 适合大模型流式输出、Agent 多步骤执行、日志实时打印、进度条场景;

  • 天然配合 SSE 实现类 ChatGPT 打字机效果。

4. 和普通返回值的区别

  • 普通接口:组装完全量数据 → 一次性返回 → 连接关闭;

  • Emitter 流式:先交付管道 → 异步分步推数据 → 手动关闭连接。

SSE流式接口 完整流程

  • 请求到达,Tomcat 自动创建 Request/Response,Spring 注入到控制器;

  • 通过 HttpServletResponse 提前设置 SSE 协议头,声明长连接 + 事件流;

  • 构建 ResponseBodyEmitter 长连接管道,交给 Spring 管理;

  • 将 emitter 传入调度服务,异步执行 Agent 逻辑

  • 大模型思考、工具调用、知识库检索等每一步,通过 emitter.send() 实时推送;

  • Agent 执行完成,调用 complete() 关闭长连接,流程结束。