SpringBoot學習<五>(SpringMvc自動配置)

Spring MVC

Spring Web MVC框架(通常簡稱為springmvc)是一個“model view controller“的Web框架。Spring MVC允許您創建@Controller或@RestController的bean來處理傳入的HTTP請求。控制器中的方法使用@RequestMapping註釋映射到HTTP。

下面是@RestController提供JSON數據的典型示例:

<code>@RestController
@RequestMapping(value="/users")
public class MyRestController {

@RequestMapping(value="/{user}", method=RequestMethod.GET)
public User getUser(@PathVariable Long user) {
// ...
}

@RequestMapping(value="/{user}/customers", method=RequestMethod.GET)
List<customer> getUserCustomers(@PathVariable Long user) {
// ...
}

@RequestMapping(value="/{user}", method=RequestMethod.DELETE)
public User deleteUser(@PathVariable Long user) {
// ...
}

}/<customer>/<code>

Spring Boot對SpringMvc的默認配置

SpringBoot 的自動配置類:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration

SpringBoot 自動配置好了SpringMVC,以下是SpringBoot對SpringMVC的默認配置:

1.自動配置了ContentNegotingViewResolver和BeanNameViewResolver bean。ContentNegotiatingViewResolver:組合所有的視圖解析器。

SpringBoot學習<五>(SpringMvc自動配置)

2.支持服務靜態資源,包括支持WebJars。如果進入SpringMVC的規則為/時,Spring Boot的默認靜態資源的路徑為:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

SpringBoot學習<五>(SpringMvc自動配置)


SpringBoot學習<五>(SpringMvc自動配置)

SpringBoot學習<五>(SpringMvc自動配置)

進入規則為*.xxx 或者 不指定靜態文件路徑時


SpringBoot學習<五>(SpringMvc自動配置)


SpringBoot學習<五>(SpringMvc自動配置)

3.Converter,GenericConverter,Formatter。Converter(轉換器):將頁面提交的數據轉換為後臺接受的數據(如頁面提交用戶的年齡,性別信息,後臺用User對象接收,使用Converter做類型轉換),Formatter格式化器(頁面傳入2017.12.17轉為Date類型)。

4.支持HttpMessageConverter。Spring MVC使用HttpMessageConverter接口來轉換HTTP請求和響應。可以將對象可以自動轉換為JSON(使用Jackson庫)或XML。默認情況下,字符串使用UTF-8編碼。

SpringBoot學習<五>(SpringMvc自動配置)

SpringBoot 中自定義消息轉換器:

<code>  @Bean
public StringHttpMessageConverter stringHttpMessageConverter(){
StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
return converter;
} /<code>

默認配置:

SpringBoot學習<五>(SpringMvc自動配置)

SpringBoot學習<五>(SpringMvc自動配置)

5.自動註冊MessageCodesResolver。定義錯誤代碼生成規則。

6.靜態首頁訪問,index.html。

7.自定義Favicon支持。

8.自動使用可配置的WebBindingInitializer bean。

自定義配置SpringMVC

有些時候我們需要自已配置SpringMVC而不是採用默認,比如說增加一個攔截器,這個時候就得通過繼承WebMvcConfigurerAdapter然後重寫父類中的方法進行擴展。

<code>import java.nio.charset.Charset;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration //申明這是一個配置
public class MySrpingMVCConfig extends WebMvcConfigurerAdapter{

// 自定義攔截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor handlerInterceptor = new 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 {

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
}
};
registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
}

// 自定義消息轉化器的第二種方法
@Override
public void configureMessageConverters(List<httpmessageconverter>> converters) {
StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
converters.add(converter);
}

}/<httpmessageconverter>/<code>

如果您想保留SpringBoot MVC特性,並且只想添加額外的MVC配置(攔截器、Formatter、視圖控制器等),那麼可以編寫一個配置類(@Confifiguration),是WebMvcConfigurerAdapter類型,但不需要@EnableWebMvc。如果希望提供RequestMappingHandlerMapping、questMappingHandlerAdapter或ExceptionHandlerExceptionResolver的自定義實例,則可以聲明提供此類組件的WebMVCReristrationAdapter實例。

全面接管SpringMVC

SpringBoot對SpringMVC的自動配置不需要了,所有都是我們自己配置;所有的SpringMVC的自動配置都失效了,我們需要在配置類中添加@EnableWebMvc即可;

<code>//使用WebMvcConfigurerAdapter可以來擴展SpringMVC的功能
@EnableWebMvc

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
// super.addViewControllers(registry);
//瀏覽器發送 /test 請求來到 success
registry.addViewController("/test").setViewName("success");
}
}
/<code>

1)、SpringBoot在自動配置很多組件的時候,先看容器中有沒有用戶自己配置的(@Bean、 @Component)如 果有就用用戶配置的,如果沒有,才自動配置;如果有些組件可以有多個(ViewResolver)將用戶配置的和自己默 認的組合起來;

2)、在SpringBoot中會有非常多的xxxConfifigurer幫助我們進行擴展配置

3)、在SpringBoot中會有很多的xxxCustomizer幫助我們進行定製配置


分享到:


相關文章: