news 2026/4/17 18:09:28

【Springboot】SpringBoot 整合 SpringMVC

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Springboot】SpringBoot 整合 SpringMVC

Spring Boot 与 Spring MVC 的整合并非新增功能,而是 Spring Boot 基于约定大于配置的思想,对 Spring MVC 核心组件实现了开箱即用的自动配置。其本质是通过 spring-boot-starter-web 启动器封装 Spring MVC 核心依赖和自动配置类,让开发者无需手动配置 DispatcherServlet、视图解析器、消息转换器等核心组件,能直接快速使用 Spring MVC 的所有核心能力,同时仍保留完全的自定义扩展能力。

SpringMVC自动管理

在 pom.xml 中引入 spring-boot-starter-web 启动器

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

这个启动器不仅封装了 Spring MVC 核心依赖,还包含了内嵌 Tomcat、JSON 解析、Servlet 等依赖,是自动装配的依赖基础

开启自动装配开关

@SpringBootApplication public class MvcDemoApplication { public static void main(String[] args) { SpringApplication.run(MvcDemoApplication.class, args); } }

启动类上的 @SpringBootApplication 注解包含 @EnableAutoConfiguration 注解,这个注解会触发 Spring Boot 扫描并加载所有预设的自动配置类

Spring Boot 对 Spring MVC 的自动装配核心由 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration 类实现

WebMvcAutoConfiguration 类

这是典型的条件化配置:仅当应用为 Servlet 类型的 Web 应用、项目引入 Spring MVC 核心依赖,且用户未自定义 WebMvcConfigurationSupport 类(即未完全接管 MVC 底层配置)时,该配置类才会生效。且生效时,它会先等待 DispatcherServlet 和参数校验的自动配置类加载完成,再以高优先级加载自身,确保 Spring MVC 核心组件的自动注册安全且有序。

自动装配的核心内容

WebMvcAutoConfiguration 类会自动向 Spring 容器注册 / 初始化 Spring MVC 核心组件,覆盖请求处理全流程

视图解析器

自动整合容器中所有的视图解析器

解析视图:

从容器中获取所有的视图解析器:

静态资源访问

详见【Springboot】热部署和静态资源映射规则

消息转换和格式化

Formatter 格式化器
日期格式化:

添加格式化器:

自己添加的格式化转换器只需放在容器中即可

HttpMessageConverters 消息转化器

从容器中获取所有的 HttpMessageConverters

核心配置项

Spring Boot 提供的核心配置项是简化 Spring MVC 配置的高效捷径。
其本质在于将 Spring MVC 底层繁杂的配置逻辑封装为可直接配置的属性项,开发人员只需根据实际业务场景的需求调整这些配置项的取值,即可快速适配各类业务场景,无需编写复杂的底层配置代码。

举例:把静态资源访问路径从默认的 /** 改成 /static/**,主配置文件 application.yml 中添加如下内容

扩展 Spring MVC

若核心配置项无法满足定制需求,可通过实现 WebMvcConfigurer 接口进行编程式配置。
在 Spring Boot 中,扩展 Spring MVC 的核心是实现 WebMvcConfigurer 接口,作为 Spring 原生提供的功能扩展接口,它支持在保留 Spring Boot 自动配置的前提下,按需定制 Spring MVC 的各类核心功能,如拦截器、静态资源规则、视图解析器等。

WebMvcConfigurer 接口源码如下:

编程式配置扩展 Spring MVC 的核心原则:
配置类上必须加 @Configuration 注解,声明为配置类;
配置类上不能加 @EnableWebMvc 注解(否则会禁用 SpringBoot 的 MVC 自动配置,所有组件需手动配置);
扩展逻辑通过重写 WebMvcConfigurer 的默认方法实现,Spring Boot 会自动识别并整合这些配置。

在容器中注册视图控制器

示例:创建一个 MyMVCConfig 实现 WebMvcConfigurer 接口,实现 addViewControllers 方法,完成通过 /login 访问转发到 success.html 的工作,代码如下:

@Configuration public class MyMVCCofnig implements WebMvcConfigurer{ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/login").setViewName("success"); } }

自定义静态资源路径

@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/my-static/"); }

例如访问 http://localhost:8080/static/test.js ,会映射到 classpath:/my-static/test.js

注册格式化器

注册格式化器用于解决前端日期字符串与后端 Date 类型参数自动绑定问题,当然通过 application.properties 配置方式也可以实现。

@Override public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new Formatter<Date>() { @Override public String print(Date date, Locale locale) { return null; } @Override public Date parse(String s, Locale locale) throws ParseException { return new SimpleDateFormat("yyyy-MM-dd").parse(s); } }); }

举例实现效果:
当前端通过表单 / JSON 传入 {“createTime”: “2025-12-03”},后端 Controller 方法参数为 public void add(@RequestParam Date createTime),Spring 会自动调用上面注册的 Formatter,将 String 类型的 2025-12-03 解析为 Date 对象。

消息转换器扩展fastjson

在 pom.xml 中引入 fastjson

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>

配置消息转换器

添加 fastjson,Spring 集成 fastjson 处理 JSON 转换的全局配置

@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fc = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fc.setFastJsonConfig(fastJsonConfig); converters.add(fc); }

当这个配置生效后,Spring MVC 的 JSON 处理会完全交给 fastjson,返回的 JSON 会是格式化后的结构

在实体类上可以继续控制,使用 @JSONField 注解,此注解是对全局配置的局部覆盖

public class User{ @JSONField(format = "yyyy-MM-dd") private Date date; }

指定 date 字段在 JSON 序列化(Java 对象 → JSON 字符串)和反序列化(JSON 字符串 → Java 对象)时的日期格式。

拦截器

创建拦截器

public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("前置拦截"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("后置拦截"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("最终拦截"); } }

拦截器注册

@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/hello2"); }

addPathPatterns:指定拦截的路径(支持通配符);
excludePathPatterns:指定排除的路径(必须包含静态资源、错误页面等,否则会拦截这些默认资源)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:48:24

【大模型推理效率突围】:Open-AutoGLM指令融合技术深度拆解

第一章&#xff1a;Open-AutoGLM指令集优化Open-AutoGLM 是面向大规模语言模型推理与训练的开源指令集架构&#xff0c;旨在通过底层指令优化提升计算效率与内存利用率。该架构支持动态指令融合、向量寄存器重映射以及跨层计算流水线调度&#xff0c;适用于异构计算环境下的高性…

作者头像 李华
网站建设 2026/4/18 2:06:27

为什么顶尖团队都在用Open-AutoGLM?一文看懂其架构设计精髓

第一章&#xff1a;为什么顶尖团队都在用Open-AutoGLM&#xff1f;在人工智能与自动化深度融合的今天&#xff0c;顶尖技术团队正加速转向高效、可扩展的智能开发框架。Open-AutoGLM 作为开源领域中首个融合大语言模型&#xff08;LLM&#xff09;推理与自动化任务执行的平台&a…

作者头像 李华
网站建设 2026/4/16 19:33:22

Open-AutoGLM模板怎么用?99%人都不知道的4个隐藏技巧

第一章&#xff1a;Open-AutoGLM流程模板的核心价值Open-AutoGLM流程模板作为新一代自动化生成语言模型任务编排框架&#xff0c;其核心价值在于将复杂的人工智能工作流抽象化、模块化与可复用化。该模板通过标准化接口定义和灵活的插件机制&#xff0c;显著降低了开发者在构建…

作者头像 李华
网站建设 2026/4/16 8:56:34

TypeScript 条件语句

TypeScript 条件语句详解 TypeScript 的条件语句语法与 JavaScript 完全相同&#xff0c;包括 if、else if、else、switch 和三元运算符。TypeScript 的优势在于类型缩小&#xff08;Type Narrowing&#xff09;&#xff1a;通过条件判断&#xff0c;TS 能在编译时自动推断变量…

作者头像 李华
网站建设 2026/4/17 2:55:47

数据管道测试:确保流入模型的数据始终高质量

在人工智能与大数据时代&#xff0c;数据已成为驱动决策的核心要素。对于软件测试从业者而言&#xff0c;数据管道测试正成为不可或缺的专业能力。本文旨在系统阐述数据管道测试的方法论与实践策略&#xff0c;帮助测试团队构建完善的数据质量保障体系。 数据管道测试的核心价…

作者头像 李华
网站建设 2026/4/15 17:59:10

从入门到精通,Open-AutoGLM拖拽搭建全流程详解,新手也能日均提速3倍

第一章&#xff1a;Open-AutoGLM拖拽式流程搭建概述Open-AutoGLM 是一款面向大模型应用开发的可视化流程编排工具&#xff0c;旨在降低非专业开发者在构建复杂 AI 流程时的技术门槛。通过直观的拖拽式界面&#xff0c;用户可以将数据处理、模型调用、逻辑判断等模块自由组合&am…

作者头像 李华