WebMvcConfigurer

WebMvcConfigurer 是 Spring Framework 提供的一个接口,用于自定义 Spring MVC 的配置。它允许开发者在不使用 XML 配置的情况下,通过 java 代码来调整和扩展 Spring MVC 的默认配置。

常用方法及其作用

  1. addViewControllers(ViewControllerRegistry registry)

    • 用于注册视图控制器,这些控制器将请求路径映射到视图名称。非常适用于简单的路径到视图的映射,无需编写实际的控制器类。

    • 示例:

         @Override
         public void addViewControllers(ViewControllerRegistry registry) {
             registry.addViewController("/").setViewName("home");
         }
         ```
    
  2. configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)

    • 配置静态资源的处理。通常用于配置静态资源(如 CSS、JavaScript 文件)的处理方式。

    • 示例:

     @Override
     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
         configurer.enable();
     }
    
  3. addResourceHandlers(ResourceHandlerRegistry registry)

    • 配置静态资源的处理。你可以定义静态资源(如图片、CSS 文件、JavaScript 文件)的位置和访问路径。

    • 示例:

      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("/resources/**")
                  .addResourceLocations("/public/", "classpath:/static/");
      }
    
  4. addInterceptors(InterceptorRegistry registry)

    • 用于注册拦截器。拦截器可以在请求处理的不同阶段(如请求前、请求后)执行自定义逻辑。

    • 示例:

       @Override
       public void addInterceptors(InterceptorRegistry registry) {
           registry.addInterceptor(new MyInterceptor())
                   .addPathPatterns("/**");
       }
      
  5. configureViewResolvers(ViewResolverRegistry registry)

    • 配置视图解析器。你可以定义视图解析器的行为,例如 Thymeleaf、JSP 等视图的解析方式。

    • 示例:

      @Override
      public void configureViewResolvers(ViewResolverRegistry registry) {
          ThymeleafViewResolver resolver = new ThymeleafViewResolver();
          resolver.setTemplateEngine(new SpringTemplateEngine());
          registry.viewResolver(resolver);
      }
    
  6. configureContentNegotiation(ContentNegotiationConfigurer configurer)

    • 配置内容协商,决定响应的内容类型(如 JSON、XML、HTML)。

    • 示例:

      @Override
      public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
          configurer.favorPathExtension(false)
                    .favorParameter(true)
                    .parameterName("mediaType")
                    .ignoreAcceptHeader(false);
      }
    
  7. configureMessageConverters(List<HttpMessageConverter<?>> converters)

    • 配置消息转换器。消息转换器用于将 HTTP 请求和响应的内容转换为 java 对象或将 java 对象转换为响应内容。

    • 示例:

     @Override
     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
         converters.add(new MappingJackson2HttpMessageConverter());
     }
    
  8. 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 接口,你可以控制视图解析、静态资源处理、请求拦截、消息转换等方面的行为,进而满足应用的具体需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值