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

相关推荐
管鲍考试学习系统19 小时前
在线考试系统是什么?功能、部署、应用场景全详解(管鲍考试学习系统 V8.0 深度版)
学习·架构·在线考试·考试系统·培训考试·考试练习
han_hanker19 小时前
@Validated @Valid 用法
java·spring boot
小CC吃豆子19 小时前
详细介绍一下静态分析工具 SonarQube
java
CheerWWW19 小时前
深入理解计算机系统——位运算、树状数组
笔记·学习·算法·计算机系统
DevOpenClub19 小时前
全国三甲医院主体信息 API 接口
java·大数据·数据库
言慢行善20 小时前
SpringBoot中的注解介绍
java·spring boot·后端
一勺菠萝丶20 小时前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
无巧不成书021820 小时前
Java包(package)全解:从定义、使用到避坑,新手零基础入门到实战
java·开发语言·package·java包
身如柳絮随风扬20 小时前
SpringMVC 异常处理?Spring 父子容器?
java·spring·mvc
鬼先生_sir20 小时前
Spring AI Alibaba 用户使用手册
java·人工智能·springai