WebMvcConfigurer
是 Spring Framework 提供的一个接口,用于自定义 Spring MVC 的配置。它允许开发者在不使用 XML 配置的情况下,通过 java 代码来调整和扩展 Spring MVC 的默认配置。
常用方法及其作用
-
addViewControllers(ViewControllerRegistry registry)
-
用于注册视图控制器,这些控制器将请求路径映射到视图名称。非常适用于简单的路径到视图的映射,无需编写实际的控制器类。
-
示例:
@Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("home"); } ```
-
-
configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
-
配置静态资源的处理。通常用于配置静态资源(如 CSS、JavaScript 文件)的处理方式。
-
示例:
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
-
-
addResourceHandlers(ResourceHandlerRegistry registry)
-
配置静态资源的处理。你可以定义静态资源(如图片、CSS 文件、JavaScript 文件)的位置和访问路径。
-
示例:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**") .addResourceLocations("/public/", "classpath:/static/"); }
-
-
addInterceptors(InterceptorRegistry registry)
-
用于注册拦截器。拦截器可以在请求处理的不同阶段(如请求前、请求后)执行自定义逻辑。
-
示例:
@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**"); }
-
-
configureViewResolvers(ViewResolverRegistry registry)
-
配置视图解析器。你可以定义视图解析器的行为,例如 Thymeleaf、JSP 等视图的解析方式。
-
示例:
@Override public void configureViewResolvers(ViewResolverRegistry registry) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(new SpringTemplateEngine()); registry.viewResolver(resolver); }
-
-
configureContentNegotiation(ContentNegotiationConfigurer configurer)
-
配置内容协商,决定响应的内容类型(如 JSON、XML、HTML)。
-
示例:
@Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false) .favorParameter(true) .parameterName("mediaType") .ignoreAcceptHeader(false); }
-
-
configureMessageConverters(List<HttpMessageConverter<?>> converters)
-
配置消息转换器。消息转换器用于将 HTTP 请求和响应的内容转换为 java 对象或将 java 对象转换为响应内容。
-
示例:
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); }
-
-
extendMessageConverters(List<HttpMessageConverter<?>> converters)
-
扩展已有的消息转换器列表。这允许你在已有转换器的基础上添加自定义转换器。
-
示例:
@Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new CustomHttpMessageConverter()); }
-
配置示例
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**");
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MappingJackson2HttpMessageConverter());
}
// 其他方法可以根据需要实现
}
总结
WebMvcConfigurer 提供了一种灵活的方式来定制和扩展 Spring MVC 的配置。通过实现 WebMvcConfigurer 接口,你可以控制视图解析、静态资源处理、请求拦截、消息转换等方面的行为,进而满足应用的具体需求。