springboot-配置springmvc
1 springboot對springmvc的預設配置
- 檢視解析器:Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
- 支援靜態資原始檔夾的路徑,以及webjars: Support for serving static resources, including support for WebJars
- 轉換器,通用轉換器(這就是我們網頁提交資料到後臺自動封裝成為物件的東西,比如把"1"字串自動轉換為int型別),格式化器(比如頁面給我們了一個2019-8-10,它會給我們自動格式化為Date物件):Automatic registration of Converter, GenericConverter, and Formatter beans.
- Http資訊轉換器(SpringMVC用來轉換Http請求和響應的的,比如我們要把一個User物件轉換為JSON字串):Support for HttpMessageConverters
- 定義錯誤程式碼生成規則:Automatic registration of MessageCodesResolver
- 首頁定製:Static index.html support.
- 圖示定製:Custom Favicon support
- 初始化資料繫結器(幫我們把請求資料繫結到JavaBean中):Automatic use of a ConfigurableWebBindingInitializer bean
2 自定義mvc配置
- 如果您想保留 springboot 預設的 mvc 配置 並增加一些自定義的 mvc 配置(攔截器,格式化程式,檢視控制器和其他功能),您可以編寫一個自己的 WebMvcConfigurer 類並新增 @Configuration 註解,但不新增 @EnableWebMvc註解:If you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc.
- 如果您想提供 RequestMappingHandlerMapping,RequestMappingHandlerAdapter 或 ExceptionHandlerExceptionResolver 的自定義例項,並且仍然保留 springboot 預設的 mvc 配置,您可以宣告一個 WebMvcRegistrations 型別的 bean 並使用它來提供這些元件的自定義例項:If you want to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, and still keep the Spring Boot MVC customizations, you can declare a bean of type WebMvcRegistrations and use it to provide custom instances of those components.
- 如果你想完全接管 springmvc(springboot對springmvc的自動配置全部失效,所有配置都是我們自己去編寫),您可以編寫一個自己的 WebMvcConfigurer 類並新增 @Configuration 註解和 @EnableWebMvc註解:If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc
3 測試新增一個自定義檢視解析器
ContentNegotiatingViewResolver 這個檢視解析器就是用來組合所有的檢視解析器的,如果我們給容器中去新增一個檢視解析器,這個類就會幫我們自動的將它組合進來
3.1 編寫一個mvc配置檔案
package com.lv.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Locale;
//擴充套件springmvc dispatchServlet
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//如果,你想自定義一些定製化功能,只要寫這個元件,然後將它交給springboot,springboot就會幫我們自動裝配
@Bean
public ViewResolver myViewResolver(){
return new MyViewResolver();
}
//ViewResolver:實現了檢視解析器介面的類,我們就可以把它看作檢視解析器
//自定義了一個自己的檢視解析器MyViewResolver
public static class MyViewResolver implements ViewResolver{
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception{
return null;
}
}
}
3.2 debug斷點測試
我們給 DispatcherServlet類 中的 doDispatch方法加個斷點進行除錯一下,因為所有的請求都會走到這個方法中,然後啟動專案,隨便訪問一個頁面,檢視一下Debug資訊
這個就是我們自定義的檢視解析器,說明已經生效了
4 日期格式化
4.1springboot預設配置的日期格式
4.2 我們可以在spingboot配置檔案自定義格式來覆蓋預設的
application.properties
spring.mvc.format.date-time=yyyy-MM-dd HH:mm:ss
5 擴充套件springmvc方式
以下使用新增檢視跳轉演示
5.1在src/main/resources/templates新建一個html頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我自己定義的,嘿嘿嘿</h1>
</body>
</html>
5.2 匯入thymeleaf依賴
<!--thymeleaf模板引擎-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
5.2 編寫一個MyMvcConfig.java
package com.lv.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//如果我們要擴充套件springmvc,官方建議我們這樣去做
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//檢視跳轉
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/lv").setViewName("test");
}
}
5.3 啟動程式測試
跳轉成功,結論:我們要擴充套件SpringMVC,官方就推薦我們使用這種方式,既保SpringBoot留所有的自動配置,也能用我們擴充套件的配置
6 全面接管springmvc方式
springboot對springmvc的預設配置全部失效,只生效我們自定義的配置,只需要在配置類中加入@EnableWebMvc註解即可,不推薦這種方式,下面測試一下
6.1 在src/main/resources/static 目錄下新建一個 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我自己寫的首頁,嘿嘿嘿</h1>
</body>
</html>
這是springboot預設定製首頁的方式,會自動在src/main/resources/static目錄下尋找index.html作為首頁,這個行為就代表了springboot對springmvc的預設配置
6.2 啟動專案訪問首頁
訪問成功,說明目前springboot對springmvc的預設配置是生效的
6.3 在MyMvcConfig.java中加入@EnableWebMvc註解
package com.lv.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/lv").setViewName("test");
}
}
6.4 重啟程式,再次訪問首頁
首頁訪問不到了,說明springboot對springmvc的預設配置失效了