《从静态页到自定义 Header:Spring MVC 响应能力通关指南》

一、响应

1.返回静态⻚⾯

创建前端⻚⾯index.html(注意路径)

html代码如下:

后台代码:

运行结果:

正确代码如下:

1.1 场景与问题
  • 目标 :通过 Spring MVC 接口返回static目录下的index.html静态页面。
  • 初始问题 :使用@RestController注解时,接口直接将"/index.html"作为字符串返回(而非解析为静态页面)。
1.2 核心原因:@RestController@Controller的区别
注解 作用
@RestController @Controller+@ResponseBody的组合,直接将返回值作为响应体(不会解析为视图)。
@Controller 用于标记 MVC 控制器,返回字符串时会被视图解析器处理(找到对应的静态页面 / 模板)。
1.3正确实现逻辑
  1. 将静态页面(如index.html)放在 Spring Boot 默认的静态资源目录resources/static下。
  2. 控制器类使用@Controller注解,接口方法返回静态页面的路径(如"/index.html")。
  3. 视图解析器会自动识别路径,找到static目录下的index.html并返回其内容。
MVC 模式的演变(前后端分离背景)
  • 传统 MVC:Controller 接收请求→调用 Model 处理业务→选择 View(视图)展示数据,流程为 "请求→Controller→Model→View→响应"。
  • 现代前后端分离 :Java 后端不再处理视图,View 的角色变为 "返回前端渲染所需的数据",因此@RestController(返回数据)逐渐替代传统@Controller(返回视图)。
2.返回HTML代码⽚段
  1. 实现逻辑 :后端方法通过@ResponseBody返回包含 HTML 标签的字符串,浏览器会自动解析该字符串为 HTML 元素。
  2. 示例效果 :方法返回"<h1>Hello,HTML~</h1>",浏览器会将其渲染为一级标题样式的文本。
  3. 响应类型 :Spring MVC 会自动将Content-Type设置为text/html,告知浏览器按 HTML 格式解析响应体。
常见Content-Type及对应场景
Content-Type 值 响应体数据格式 适用场景
text/html HTML 代码 返回 HTML 片段 / 页面
text/css CSS 代码 返回 CSS 文件
application/javascript JavaScript 代码 返回 JS 文件
application/json JSON 数据 返回接口数据(前后端交互常用)
3.返回JSON
  1. 实现逻辑 :后端方法返回 Java 对象(如HashMap),@ResponseBody会自动将对象序列化为 JSON 格式字符串。
  2. 响应类型 :Spring MVC 自动将Content-Type设置为application/json,适配前后端 JSON 格式的数据交互。
4.设置状态码

SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码

4.1设置响应状态码
  1. 实现方式 :通过在控制器方法中注入HttpServletResponse对象,调用其setState()方法指定状态码。
  2. 特点:状态码仅标识请求的处理结果,不影响响应体内容的展示,需通过工具(如 Fiddler)查看实际状态码。
4.2@RequestMapping注解的核心属性

@RequestMapping用于配置请求映射,其主要属性及作用如下:

属性名 作用描述
value/path 指定映射的 URL 路径(核心属性)。
method 指定允许的请求方法(如RequestMethod.GETRequestMethod.POST)。
consumes 指定可处理的请求体格式(Content-Type),如application/json
produces 指定响应体的格式(Content-Type),可同时设置字符编码(如application/json;charset=utf-8)。
params 指定请求必须包含的参数,否则不匹配该方法。
headers 指定请求必须包含的 Header,否则不匹配该方法。
4.3配置响应 Header(以Content-Type为例)
  1. 实现方式 :通过@RequestMappingproduces属性,指定响应的Content-Type
  1. 示例场景
    • 配置produces = "application/json",响应的Content-Type会被设为 JSON 格式;
    • 配置produces = "application/json;charset=utf-8",可同时指定字符编码,避免中文乱码。
  2. 默认规则 :若不设置produces,Spring MVC 会根据返回内容自动匹配Content-Type(如返回字符串时默认是text/html)。
4.3设置其他Header

设置其他Header的话,需要使⽤SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置

  1. 核心依赖 :在控制器方法中注入HttpServletResponse对象,调用其setHeader(String name, String value)方法。
  2. 示例逻辑
    • 方法内执行response.setHeader("MyHeader", "MyHeaderValue"),即可在响应中添加名为MyHeader、值为MyHeaderValue的自定义 Header。
    • 若 Header 名称已存在,setHeader会覆盖原有值。
3.应用场景

自定义 Header 常用于传递额外的响应元信息,例如:

  • 接口版本标识(如Api-Version: 1.0);
  • 自定义的权限校验标识;
  • 跨域请求的相关配置(如Access-Control-Allow-Origin)。
4.4核心作用

通过手动设置状态码和 Header,可更精准地控制 HTTP 响应的元信息,适配不同的前端交互场景(如权限验证的状态码、接口数据的格式约定)。

相关推荐
a11177632 分钟前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao44 分钟前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
维天说2 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19942 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
你想知道什么?3 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御3 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
噢,我明白了3 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品3 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘3 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
AOwhisky4 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发