Spring Web MVC 入门秘籍:从概念到实践的快速通道
(2025–2026 最新风格,最适合快速上手)
这是一份极简但完整的 Spring Web MVC 入门指南,目标是让你在最短时间内理解核心概念、搭建第一个项目,并写出能用的接口。
第一步:先搞清楚 Spring Web MVC 到底是什么
一句话定义:
Spring Web MVC 是 Spring 框架提供的基于 Servlet 的 Web 层 MVC 框架,目前仍然是 Java 后端最主流的 Web 开发技术栈之一。
核心思想:“请求 → 控制器 → 业务 → 视图/响应”
经典流程图(文字版):
浏览器请求 → DispatcherServlet(前端控制器)
↓
HandlerMapping(找控制器方法)
↓
HandlerAdapter(执行控制器方法)
↓
Controller(你的 @RestController / @Controller)
↓
返回 ModelAndView 或 ResponseEntity / @ResponseBody
↓
ViewResolver(视图解析)或直接写 JSON
↓
响应给浏览器
第二步:最核心的 8 个概念(背下来就入门了)
| 序号 | 概念 | 通俗解释 | 对应注解/类 | 是否必会 |
|---|---|---|---|---|
| 1 | DispatcherServlet | Spring MVC 的“大脑”,所有请求都先到它 | web.xml 或 SpringBoot 自动配置 | ★★★★★ |
| 2 | @Controller | 声明这是一个控制器(返回视图) | @Controller | ★★★★☆ |
| 3 | @RestController | 控制器 + 所有方法默认 @ResponseBody(返回 JSON) | @RestController | ★★★★★ |
| 4 | @RequestMapping | 映射请求路径、方法(GET/POST 等) | @GetMapping / @PostMapping 等 | ★★★★★ |
| 5 | @RequestParam | 接收查询参数 / 表单参数 | @RequestParam | ★★★★☆ |
| 6 | @PathVariable | 接收 URL 路径中的变量 | @PathVariable | ★★★★☆ |
| 7 | @RequestBody | 接收 JSON 请求体 | @RequestBody | ★★★★★ |
| 8 | Model / ModelAndView | 向视图传递数据(传统视图用得多) | Model.addAttribute() | ★★★☆☆ |
第三步:Spring Boot 项目快速搭建(推荐方式)
方式一:使用 Spring Initializr(最快)
- 打开:https://start.spring.io
- 选择:
- Project:Maven / Gradle
- Language:Java
- Spring Boot:3.3.x 或 3.4.x
- Dependencies:Spring Web
- 生成 → 解压 → 用 IDEA 打开
方式二:IDEA 直接创建
New Project → Spring Initializr → 选 Spring Web → Finish
第四步:第一个能跑的 Hello World(Restful 接口)
// HelloController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello(
@RequestParam(value = "name", defaultValue = "World") String name) {
return "Hello, " + name + "!";
}
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
return "User ID: " + id;
}
}
访问:
- http://localhost:8080/hello → Hello, World!
- http://localhost:8080/hello?name=Tom → Hello, Tom!
- http://localhost:8080/user/123 → User ID: 123
第五步:接收 JSON 参数(最常用场景)
// User.java(DTO)
public class User {
private Long id;
private String username;
private Integer age;
// getter / setter / toString
}
// Controller
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
// 模拟保存
user.setId(100L);
return ResponseEntity.ok(user);
}
Postman 测试 body(raw json):
{
"username": "alice",
"age": 25
}
返回:
{
"id": 100,
"username": "alice",
"age": 25
}
第六步:必会的高频注解组合速查表
| 场景 | 推荐写法 | 说明 |
|---|---|---|
| GET 查询参数 | @GetMapping + @RequestParam | 查询字符串 |
| GET 路径参数 | @GetMapping("/users/{id}") + @PathVariable | RESTful 风格 |
| POST JSON | @PostMapping + @RequestBody | 最常见创建接口 |
| PUT 更新 | @PutMapping + @RequestBody | 整体更新 |
| PATCH 部分更新 | @PatchMapping + @RequestBody | 局部更新 |
| DELETE | @DeleteMapping("/users/{id}") | 删除资源 |
| 返回状态码 + 数据 | ResponseEntity.ok() / .created() 等 | 推荐方式 |
| 文件上传 | @PostMapping + @RequestPart("file") MultipartFile file | 上传场景 |
第七步:常见新手坑 & 解决方案
- 启动类没扫描到 Controller
确保启动类在根包下,或使用@ComponentScan("com.your.base.package") - @RequestBody 接收不到数据
检查 Content-Type 是否为application/json
检查 DTO 是否有无参构造 + getter/setter - 返回 JSON 中字段为 null 不显示
默认不显示 null,可加@JsonInclude(Include.ALWAYS) - 跨域问题(CORS)
最快解决:加@CrossOrigin或全局配置 CorsFilter
第八步:推荐的进阶学习路径(快速上手后)
- 学 @ControllerAdvice + @ExceptionHandler 统一异常处理
- 学 @Valid + BindingResult 参数校验
- 学 ResponseEntity 精细控制响应
- 学 RestTemplate / WebClient 调用下游接口
- 学 拦截器(HandlerInterceptor) 和 过滤器(Filter) 的区别
- 了解 Spring Boot Actuator 暴露端点
最后总结:一句话快速记住 Spring Web MVC
Spring Web MVC 的本质就是:DispatcherServlet 接收所有请求 → 根据路径找到你的 @RestController 方法 → 执行方法 → 返回数据/视图 → 响应浏览器。
记住这 8 个核心注解 + 一个流程,你就已经入门了。
需要我现在帮你写一个带异常处理、参数校验、分页查询、统一响应格式的完整小 Demo 吗?
或者想深入某个具体点(比如文件上传、统一响应封装、CORS、拦截器)?
直接告诉我,我可以继续展开!