zoukankan      html  css  js  c++  java
  • 【springboot】之 解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter

    WebMvcConfigurationAdapter在spring boot新版本中已经被废弃了,因为WebMvcConfigurationAdapter中的默认实现方法已经在它的父类中实现了。新版本spring boot是基于jdk8实现的,所以支持在接口中添加默认实现方法。

    springboot默认格式化日期只需要在application文件中配置

    spring.jackson.date-format= yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone= GMT+8
    spring.jackson.locale= zh_CN

    但是,我在配置过程中发现日期格式依然是long类型,也就是日期格式没有生效

    经过查看代码发现,我的MvcConfig继承了WebMvcConfigurationSupport

    那么这个类到底做什么呢?导致application配置的json格式失效呢?

    如下:

    在spring-boot+spring mvc 的项目中,有些时候我们需要自己配置一些项目的设置,就会涉及到这三个,那么,他们之间有什么关系呢? 
    首先,@EnableWebMvc=WebMvcConfigurationSupport,使用了@EnableWebMvc注解等于扩展了WebMvcConfigurationSupport但是没有重写任何方法

    所以有以下几种使用方式:

    • @EnableWebMvc,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置,完全被spring mvc框架控制。
    @Configuration
     @EnableWebMvc
     @ComponentScan(basePackageClasses = MyConfiguration.class)
     public class MyConfiguration {
    
     }
    • extends WebMvcConfigurationSupport,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
    @Configuration
     @EnableWebMvc
     @ComponentScan(basePackageClasses = MyConfiguration.class)
     public class MyConfiguration implements WebMvcConfigurer {
    
               @Override
               public void addFormatters(FormatterRegistry formatterRegistry) {
             formatterRegistry.addConverter(new MyConverter());
               }
    
               @Override
               public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
             converters.add(new MyHttpMessageConverter());
               }
    
     }
    • implements WebMvcConfigurer,在扩展的类中重写父类的方法即可,但是不要加@EnableWebMvc。这种方式依旧使用springboot的@EnableAutoConfiguration中的设置,还可以添加spring mvc框架中的一些配置,比如(过滤器等)

     @Configuration
     @ComponentScan(basePackageClasses = MyConfiguration.class)
     public class MyConfiguration implements WebMvcConfigurer {
    
               @Override
               public void addFormatters(FormatterRegistry formatterRegistry) {
             formatterRegistry.addConverter(new MyConverter());
               }
    
               @Override
               public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
             converters.add(new MyHttpMessageConverter());
               }
    
     }

    具体哪种方法适合,看个人对于项目的需求和要把控的程度

    在WebMvcConfigurationSupport(@EnableWebMvc)和@EnableAutoConfiguration这两种方式都有一些默认的设定 

    参考:

    https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

    https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html

    https://www.cnblogs.com/gyjx2016/p/8494498.html

  • 相关阅读:
    Google Chrome开发者工具
    自动跳转页面
    Java读取properties配置文件
    Linux(CentOS):安装JDK + MySQL + FTP
    MySQL数据库完全卸载
    Java冒泡排序
    Java选择排序
    Java多线程总结
    数据库索引(Oracle和MySql)
    Oracle数据库
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/12542860.html
Copyright © 2011-2022 走看看