Springboot整合springmvc的自动装配

Springboot整合springmvc

官方文档链接:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc

Spring Boot 对 Spring MVC 提供了自动配置支持,核心是通过 spring-boot-starter-web 快速集成,无需手动配置 DispatcherServlet、视图解析器等核心组件。整合的本质是利用 Spring Boot 的自动配置简化配置,同时支持自定义扩展。

Springboot 整合 springmvc 的官网内容如图

Springmvc的自动解管理

Spring Boot 整合 Spring MVC 的核心:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration 自动装配类

视图解析器

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

解析视图:

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

静态资源访问

我的这一篇博客详细讲述了springboot的静态资源映射规则 springboot的热部署和静态资源映射规则

消息转换和格式化

Formatter 格式化器

日期格式化:

添加格式化器:

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

HttpMessageConverters 消息转化器

从容器中获取所有的 HttpMessageConverters

Springboot扩展springmvc

在 Spring Boot 中扩展 Spring MVC 的核心是实现 WebMvcConfigurer 接口,它是 Spring 提供的功能扩展接口,允许我们在不破坏自动配置的前提下,按需定制 SpringMVC 功能(如拦截器、静态资源、视图解析器等)。

核心原则:

必须加 @Configuration 注解,声明为配置类;

绝对不能加 @EnableWebMvc 注解(否则会禁用 SpringBoot 的 MVC 自动配置,所有组件需手动配置);

扩展逻辑通过重写 WebMvcConfigurer 的默认方法实现,Spring Boot 会自动识别并整合这些配置。

WebMvcConfigurer 接口:

在容器中注册视图控制器(请求转发)

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

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

注册格式化器

注册格式化器用来对请求过来的日期格式化的字符串来做定制化,当然通过 application.properties 配置也可以实现。

java 复制代码
@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);
        }
    });
}

消息转换器扩展fastjson

在pom.xml中引入fastjson

xml 复制代码
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.47</version>
</dependency>

配置消息转换器,添加 fastjson

java 复制代码
@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);
}

在实体类上可以继续控制

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

拦截器

创建拦截器

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("最终拦截");
    }
}

拦截器注册

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

addPathPatterns:指定拦截的路径(支持通配符);

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

相关推荐
j***518937 分钟前
Spring总结(上)
java·spring·rpc
DJ斯特拉39 分钟前
日志技术Logback
java·前端·logback
古城小栈39 分钟前
SpringBoot Web容器选型指南:Tomcat与Undertow技术对比及迁移实践
spring boot·后端·tomcat
悟能不能悟39 分钟前
springboot的controller中如何拿到applicatim.yml的配置值
java·spring boot·后端
0和1的舞者40 分钟前
《SpringBoot 入门通关指南:从 HelloWorld 到问题排查全掌握》
java·spring boot·后端·网络编程·springboot·开发·网站
SamDeepThinking40 分钟前
88MB Excel文件导致系统崩溃?看我如何将内存占用降低
java·excel
考虑考虑42 分钟前
SpringBoot4中api版本控制
spring boot·后端·spring
我要添砖java42 分钟前
<JAVAEE>多线程6-面试八股文之juc中的组件
java·面试·java-ee
+VX:Fegn089543 分钟前
计算机毕业设计|基于springboot + vue二手交易管理系统(源码+数据库+文档)
数据库·vue.js·spring boot