一、簡介
WebMvcConfigurer是Spring MVC提供的一個介面,在使用Spring Boot構建應用程序時常用到。它提供一種擴展Spring MVC配置的方式,覆蓋默認的Spring MVC自動配置,從而實現更加自定義化的功能。官方文檔中對WebMvcConfigurer的描述如下:
public interface WebMvcConfigurer { default void configureViewResolvers(ViewResolverRegistry registry) { } default void addResourceHandlers(ResourceHandlerRegistry registry) { } default void configureMessageConverters(List<HttpMessageConverter>converters) { } default void extendMessageConverters(List<HttpMessageConverter>converters) { } default Validator getValidator() { return null; } default MessageCodesResolver getMessageCodesResolver() { return null; } default void configureContentNegotiation(ContentNegotiationConfigurer configurer) { } default void configureAsyncSupport(AsyncSupportConfigurer configurer) { } default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { } default void addFormatters(FormatterRegistry registry) { } default void addInterceptors(InterceptorRegistry registry) { } default void addCorsMappings(CorsRegistry registry) { } default void configurePathMatch(PathMatchConfigurer configurer) { } default void configureViewHandling(ViewResolverRegistry registry) { } default void configureRedirectHandling(RedirectViewControllerRegistry registry) { } default void configureHandlerExceptionResolvers(List resolvers) { } default void extendHandlerExceptionResolvers(List resolvers) { } default void addArgumentResolvers(List resolvers) { } default void addReturnValueHandlers(List handlers) { } default void configureMessageConverters(List<HttpMessageConverter> converters) { } default void configureContentNegotiation(ContentNegotiationConfigurer configurer) { } }
如上所示,介面提供了多個方法,可以實現對Spring MVC的自定義配置,這使得開發者能夠靈活地擴展和改變Spring Boot應用程序的行為。
二、實戰演示
接下來將通過代碼演示,對WebMvcConfigurer的常見用法進行講解。
1. 修改默認的ViewResolver
在Spring Boot中,默認配置的ViewResolver是InternalResourceViewResolver,它的作用是將JSP文件名字映射為物理視圖文件的路徑。
通過實現WebMvcConfigurer介面,可以輕鬆更改該默認配置:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/views/", ".jsp"); } }
舉例的Spring Boot配置文件如下:
spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp
以上兩種方法都是實現Spring Boot默認的配置實現技術靈活修改的一種方式。對於修改默認的ViewResolver,可以從上面這兩種方法任選其一。
2. 添加靜態資源目錄
Spring Boot默認讀取靜態文件的目錄是src/main/resources/static,這個可以在application.properties文件中配置,如下:
spring.resources.static-locations=classpath:/static/
但是,如果我們把靜態文檔放在了WEB-INF目錄下的static目錄中,此時使用上述配置時是不能讀取到相關的資源,那麼修改WebMvcConfigurer就是一個核心的實現:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/"); } }
以上是在配置類中添加方法addResourceHandlers,配置靜態資源目錄所需的做法。
3. 添加攔截器
當我們需要統計請求數、執行時間等方面的監控指標時,就可以使用Spring Boot提供的攔截器來實現。在WebMvcConfigurer中添加攔截器有兩種方式,一種是創建一個對象,將其加入到Spring容器中,然後將其注入到InterceptorRegistry中;另一種是直接把攔截器加入到InterceptorRegistry中,這裡講解第一種方式:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Bean public MyInterceptor myInterceptor() { return new MyInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor()).addPathPatterns("/**"); } }
其中,MyInterceptor是一個實現了HandlerInterceptor介面的攔截器類。
4. 配置Content-Type
在RESTful API中,客戶端需要訪問不同的介面返回各種不同的數據格式。 Spring Boot提供了通過Content-Type來處理各種數據格式的方法。如下所示的配置,可以將返回JSON格式的數據:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); List mediaTypes = new ArrayList(); mediaTypes.add(MediaType.APPLICATION_JSON_UTF8); converter.setSupportedMediaTypes(mediaTypes); converters.add(converter); } }
通過上述配置,可以將返回的數據格式設置成JSON形式。
5. 高級類型驗證
在Spring Boot應用程序中,要驗證請求中的參數和對象的正確性,可以使用Spring Boot提供的註解或JSR-303 (@NotBlank、@NotNull等)。還可以擴展高級驗證,例如自定義驗證規則,可以按如下所示進行配置:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private MyValidator myValidator; @Override public Validator getValidator() { return myValidator; } }
這裡的MyValidator類實現了Spring提供的Validator介面。通過實現自定義的驗證規則,可以在應用程序中攔截並報告錯誤。
三、總結
通過WebMvcConfigurer,開發者可以很方便地進行Spring MVC的自定義配置,覆蓋默認配置。這使得實現更加自定義化的功能變得便捷,同時也提高了應用程序的擴展性和靈活性。本文從多個方面對WebMvcConfigurer進行了詳細的解釋,希望對讀者有所幫助。
原創文章,作者:APIQC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333610.html