SpringMVC(1)核心解析与实战指南

SpringMVC(1)核心解析与实战指南 一、SpringMVC 基本概述1.概述SpringMVC 是 Spring 框架的一个重要模块是一个基于 MVCModel-View-Controller设计模式的轻量级 Web 框架。它通过一套注解和接口简化了传统 Java Web 开发的复杂性为开发者提供了一套优雅的解决方案。2.主要特点清晰的层次结构严格遵循 MVC 设计模式分离了业务逻辑Model、用户界面View和请求处理Controller强大的注解支持通过 Controller、RequestMapping 等注解简化配置灵活的视图解析支持 JSP、FreeMarker、Thymeleaf 等多种视图技术REST 支持原生支持 RESTful 风格的 Web 服务开发易于测试设计时就考虑了可测试性方便进行单元测试和集成测试3.核心组件DispatcherServlet前端控制器负责请求的分发HandlerMapping处理请求映射Controller业务逻辑处理器ViewResolver视图解析器HandlerAdapter处理器适配器4.典型工作流程用户发送请求到 DispatcherServletDispatcherServlet 调用 HandlerMapping 查找 Handler执行 HandlerAdapter 处理业务逻辑处理完成后返回 ModelAndViewViewResolver 解析视图渲染视图后返回响应5.应用场景传统 Web 应用开发RESTful API 开发微服务架构中的 Web 层与其他 Spring 模块如 Spring Boot集成开发二、RequestMapping 注解RequestMapping 是 Spring MVC 中最核心的注解之一用于将 HTTP 请求映射到 MVC 控制器中的处理方法上。该注解可以在类级别和方法级别使用提供了灵活的 URL 映射能力。基本用法类级别定义控制器的基础请求路径Controller RequestMapping(/user) public class UserController { // 方法级别的映射将继承类级别的路径 }方法级别定义具体的处理方法映射RequestMapping(/profile) public String showProfile() { return profile; }最终访问路径为/user/profile支持的属性value/path指定映射的URL路径method指定HTTP请求方法GET/POST/PUT/DELETE等RequestMapping(value /create, method RequestMethod.POST)params指定请求参数条件RequestMapping(params actionsave)headers指定请求头条件RequestMapping(headers content-typeapplication/json)consumes指定处理请求的媒体类型produces指定返回内容的媒体类型组合注解 Spring 4.3 提供了更简洁的派生注解GetMappingPostMappingPutMappingDeleteMappingPatchMapping路径变量 支持RESTful风格的URL路径参数RequestMapping(/users/{id}) public String getUser(PathVariable Long id) { // 处理逻辑 }通配符支持?匹配单个字符*匹配任意数量的字符**匹配多级路径应用场景传统的web页面请求处理RESTful API接口开发微服务间的HTTP通信前后端分离架构中的后端接口注意事项路径匹配优先级最具体的路径优先匹配避免路径冲突推荐使用组合注解提高代码可读性路径变量需要与PathVariable配合使用示例RestController RequestMapping(/api/v1/products) public class ProductController { GetMapping(/{id}) public Product getProduct(PathVariable Long id) { // 获取单个产品 } PostMapping ResponseStatus(HttpStatus.CREATED) public Product createProduct(RequestBody Product product) { // 创建新产品 } }RequestMapping 的灵活配置使得Spring MVC能够优雅地处理各种Web请求场景是构建Web应用的基础设施。三、Spring MVC 基于 Vue3 前后端分离架构实现架构设计前后端完全分离模式前端Vue3 TypeScript Vite 构建后端Spring Boot Spring MVC MyBatis交互方式RESTful API JSON 数据格式认证授权JWT Spring Security3.1前端工程配置3.1.1 Vue3 项目初始化npm init vuelatest3.1.2 主要依赖配置{ dependencies: { axios: ^1.3.4, element-plus: ^2.3.3, vue-router: ^4.2.0, pinia: ^2.0.33 } }3.2 后端接口开发控制器示例RestController RequestMapping(/api/user) public class UserController { Autowired private UserService userService; GetMapping(/{id}) public ResponseEntityUser getUser(PathVariable Long id) { return ResponseEntity.ok(userService.getById(id)); } PostMapping public ResponseEntityVoid addUser(RequestBody UserDTO userDTO) { userService.addUser(userDTO); return ResponseEntity.ok().build(); } }3.3 跨域解决方案Spring Boot 配置类Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(http://localhost:5173) .allowedMethods(*) .allowCredentials(true); } }3.4 前后端联调要点开发环境配置前端开发服务器Vite (默认端口 5173)后端开发服务器Spring Boot (默认端口 8080)API 文档管理使用 Swagger 或 YApi接口调试工具Postman 或 Apifox3.5 部署方案生产环境部署前端Nginx 静态资源部署后端Docker 容器化部署分离部署优势独立扩展能力独立发布流程资源利用最大化3.6 性能优化建议前端优化路由懒加载组件按需引入使用 keep-alive 缓存后端优化接口响应缓存数据库查询优化异步处理耗时操作四、Spring MVC 中请求参数的绑定Spring MVC 提供了多种灵活的请求参数绑定方式开发者可以根据不同场景选择最适合的参数绑定方法4.1 基本类型参数绑定自动将请求参数绑定到方法参数的基本类型int, String等示例RequestParam(username) String name当请求参数名与方法参数名一致时可省略RequestParam注解4.2 对象参数绑定自动将请求参数绑定到JavaBean对象支持嵌套对象绑定示例public String addUser(User user)Spring会自动将请求参数匹配到User对象的属性4.3 集合/数组参数绑定支持List、Set、Map等集合类型的参数绑定示例RequestParam(ids) ListInteger idList对于数组RequestParam(hobbies) String[] hobbies4.4 JSON/XML参数绑定使用RequestBody注解绑定请求体内容需要配置消息转换器如MappingJackson2HttpMessageConverter示例RequestBody User user4.5 路径变量绑定使用PathVariable获取RESTful风格的URL参数示例GetMapping(/users/{id})4.6 特殊参数绑定可直接绑定HttpServletRequest、HttpServletResponse等原生对象支持绑定Model、ModelMap等视图模型对象支持绑定SessionAttributes4.7最佳实践建议对于简单参数优先使用RequestParam对于复杂对象使用对象绑定RESTful API优先使用PathVariable前后端分离项目推荐使用RequestBody处理JSON数据4.8 常见问题处理参数类型不匹配时配置自定义类型转换器处理参数验证错误结合Valid注解处理参数缺失情况设置required属性