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:指定排除的路径(必须包含静态资源、错误页面等,否则会拦截这些默认资源);

相关推荐
一线大码3 小时前
Gradle 基础篇之基础知识的介绍和使用
后端·gradle
Java猿_3 小时前
Spring Boot 集成 Sa-Token 实现登录认证与 RBAC 权限控制(实战)
android·spring boot·后端
小王师傅664 小时前
【轻松入门SpringBoot】actuator健康检查(上)
java·spring boot·后端
醒过来摸鱼4 小时前
Java classloader
java·开发语言·python
专注于大数据技术栈4 小时前
java学习--StringBuilder
java·学习
loosenivy4 小时前
企业银行账户归属地查询接口如何用Java调用
java·企业银行账户归属地·企业账户查询接口·企业银行账户查询
码事漫谈4 小时前
C++高并发编程核心技能解析
后端
码事漫谈4 小时前
C++与浏览器交织-从Chrome插件到WebAssembly,开启性能之门
后端
IT 行者4 小时前
Spring Security 6.x 迁移到 7.0 的完整步骤
java·spring·oauth2
JIngJaneIL5 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot