一、简介
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/n/333610.html
微信扫一扫
支付宝扫一扫