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

相关推荐
小陈phd3 分钟前
多模态大模型学习笔记(一)——机器学习入门:监督/无监督学习核心任务全解析
笔记·学习·机器学习
符哥20083 分钟前
C++ 进阶知识点整理
java·开发语言·jvm
小陈phd13 分钟前
多模态大模型学习笔记(二)——机器学习十大经典算法:一张表看懂分类 / 回归 / 聚类 / 降维
学习·算法·机器学习
Sayuanni%316 分钟前
初阶_多线程1(线程含义与关键属性)
java
程序媛徐师姐16 分钟前
Java基于微信小程序的模拟考试系统,附源码+文档说明
java·微信小程序·java模拟考试系统小程序·模拟考试微信小程序·模拟考试系统小程序·模拟考试小程序·java模拟考试小程序
疯狂敲代码的老刘26 分钟前
JDK 1.6到25 全版本网盘合集 (Windows + Mac + Linux)
java·linux·windows·macos·jdk
夕除28 分钟前
js--15
java·jvm·spring
曾经的三心草32 分钟前
redis-9-集群
java·redis·mybatis
sun032238 分钟前
【架构基础】Spring中的PropertySourcesPlaceholderConfigurer介绍 (并非新知识,比较古老的一种使用方式)
java·spring·架构
学编程的闹钟39 分钟前
95【给图片添加跳转链接】
学习