2026/4/16 4:16:20
网站建设
项目流程
济宁做网站大约多少钱,app开发公司网站,不锈钢网站样板,极简网站模板视频看了几百小时还迷糊#xff1f;关注我#xff0c;几分钟让你秒懂#xff01;一、真实场景#xff1a;你写的接口#xff0c;Spring 到底做了什么#xff1f;你写了一个简单的接口#xff1a;RestController
public class UserController {GetMapping(/user/{i…视频看了几百小时还迷糊关注我几分钟让你秒懂一、真实场景你写的接口Spring 到底做了什么你写了一个简单的接口RestController public class UserController { GetMapping(/user/{id}) public User getUser(PathVariable Long id) { return new User(id, 张三); } }启动项目浏览器访问http://localhost:8080/user/123立刻返回 JSON{id:123,name:张三}但你有没有想过路径/user/123是怎么匹配到getUser方法的{id}是怎么自动转成Long id的返回的User对象是怎么变成 JSON 的整个流程是谁在协调答案就是Spring MVC二、Spring MVC 是什么通俗版Spring MVC 是 Spring 框架中专门用于构建 Web 应用的模块它基于经典的“MVC 设计模式”帮你自动处理 HTTP 请求、参数绑定、视图渲染等繁琐工作。✅ 核心目标让你只关注业务逻辑Controller 方法自动完成请求 → 方法调用 → 响应的全流程三、MVC 是啥为什么重要MVC Model模型 View视图 Controller控制器组件职责在 Spring Boot 中的表现Model数据载体Java Bean如User、OrderView展示层Thymeleaf 模板 / 或直接返回 JSON无 ViewController控制器RestController或Controller类 在前后端分离时代View 常被省略Controller 直接返回 JSON即 RESTful API但底层仍是 Spring MVC 在驱动四、Spring MVC 的核心组件架构图解浏览器 → DispatcherServlet → HandlerMapping → Controller → Service → DB ↑ ↓ HandlerAdapter ViewResolver可选关键角色说明组件作用DispatcherServlet前端控制器所有请求的统一入口本质是一个 ServletHandlerMapping根据 URL 找到对应的 Controller 方法HandlerAdapter调用 Controller 方法并处理参数/返回值ViewResolver可选将逻辑视图名转为实际页面如index.htmlHttpMessageConverter将对象 ↔ JSON/XML如ResponseBody依赖它重点DispatcherServlet 是 Spring MVC 的心脏五、动手实战手写一个 Spring MVC 流程Spring Boot 版1️⃣ 引入依赖自动包含 Spring MVC!-- pom.xml -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency✅spring-boot-starter-web内部已包含spring-webmvc2️⃣ 编写 Model// User.java public class User { private Long id; private String name; // 构造函数、getter/setter 省略可用 Lombok public User(Long id, String name) { this.id id; this.name name; } // getter... }3️⃣ 编写 Controller核心// UserController.java RestController RequestMapping(/api) public class UserController { // GET /api/user/123 GetMapping(/user/{id}) public User getUser(PathVariable Long id) { System.out.println(收到请求ID id); return new User(id, 张三); } // POST /api/user PostMapping(/user) public String createUser(RequestBody User user) { // 实际应调用 service 保存到 DB return 用户 user.getName() 创建成功; } }4️⃣ 启动 测试# 启动 mvn spring-boot:run # 测试 GET curl http://localhost:8080/api/user/123 # 测试 POST curl -X POST http://localhost:8080/api/user \ -H Content-Type: application/json \ -d {id:456,name:李四}✅ 输出{id:123,name:张三}用户 李四 创建成功 这背后全是 Spring MVC 在默默工作六、反例警告 ❌ —— 新手常踩的坑❌ 反例1忘记加RequestBody导致参数绑定失败// 错误写法 PostMapping(/user) public String createUser(User user) { // 缺少 RequestBody return OK; } 结果user对象所有字段为 null✅ 正确JSON 请求体必须用RequestBody标注。❌ 反例2混淆Controller和RestController// 错误用法 Controller public class BadController { GetMapping(/test) public String test() { return hello; // 会被当作视图名 } } 结果Spring 会去找templates/hello.html找不到就 404✅ 正确返回 JSON → 用RestController返回页面 → 用ControllerResponseBody或配合 Thymeleaf❌ 反例3路径重复导致映射冲突RestController public class AController { GetMapping(/data) public String a() { return A; } } RestController public class BController { GetMapping(/data) public String b() { return B; } // 冲突 } 启动报错Ambiguous mapping映射不明确✅ 解决确保每个 URL 唯一或使用不同前缀如/api/v1,/api/v2七、Spring MVC vs 原生 Servlet优势在哪对比项原生 ServletSpring MVC参数获取request.getParameter(id)PathVariable Long idJSON 转换手动用 Jackson自动ResponseBody路由管理手写 if-else 或 web.xml注解GetMapping异常处理try-catchControllerAdvice全局处理扩展性难拦截器、AOP、自定义转换器等✅ Spring MVC极大简化 Web 开发避免重复造轮子八、注意事项总结 ⚠️RestController Controller ResponseBody返回值直接序列化。路径变量用PathVariable请求参数用RequestParamJSON 体用RequestBody。Spring MVC 默认使用 Jackson 做 JSON 转换确保类有 getter/setter。不要手动创建 DispatcherServletSpring Boot 已自动配置。静态资源如 JS/CSS放在resources/static/下Spring MVC 会自动放行。九、结语Spring MVC 不是“另一个框架”而是Spring 生态中处理 Web 请求的标准方案。无论你是做传统页面渲染还是现代 RESTful API都离不开它。理解它你就掌握了 Java Web 开发的“任督二脉”视频看了几百小时还迷糊关注我几分钟让你秒懂