《从静态页到自定义 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 响应的元信息,适配不同的前端交互场景(如权限验证的状态码、接口数据的格式约定)。

相关推荐
Zzzzzxl_1 小时前
互联网大厂Java/Agent面试实战:微服务、RAG与Agent化实战(含答疑解析)
java·jvm·spring boot·agent·milvus·rag·microservices
卿雪1 小时前
MySQL【索引】:索引的概念与分类
java·数据库·python·mysql·adb·golang
kong@react1 小时前
springbpoot项目,富文本,xss脚本攻击防护,jsoup
java·前端·spring boot·xss
Zzzzzxl_1 小时前
互联网大厂Java/Agent面试实战:Spring Boot、JVM、微服务、Kafka与AI Agent场景问答
java·jvm·spring boot·redis·ai·kafka·microservices
菜择贰1 小时前
为IDEA创建Linux桌面快捷方式
java·linux·intellij-idea
烟囱土著1 小时前
捣鼓30天,我写了一个数学加减练习小程序
学习·算法·微信小程序·小程序
丝斯20111 小时前
AI学习笔记整理(29)—— 计算机视觉之人体姿态估计相关算法
人工智能·笔记·学习
未若君雅裁1 小时前
JVM实战总结笔记
java·jvm·笔记
xixixi777771 小时前
二值化——将具有丰富灰度或彩色信息的图像,转换为仅由两种像素值(通常是0和1,或0和255) 组成的图像,即黑白图像
网络·图像处理·人工智能·学习·计算机视觉·信息与通信