WebMvcConfigurer 详解

本文介绍了SpringFramework中的WebMvcConfigurer接口,它用于自定义配置SpringMVC,包括视图解析、静态资源、跨域、拦截器、内容协商等功能,并给出了代码示例。相比之下,WebMvcConfigurationSupport提供了更底层的定制选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

WebMvcConfigurer 接口在 Spring Framework 中用于定制和配置 Spring MVC 的各种特性。通过实现这个接口,你可以添加自定义配置和功能,而不是完全替换 Spring MVC 的默认配置。

WebMvcConfigurer 和 WebMvcConfigurationSupport 的区别
  1. WebMvcConfigurer:
    • WebMvcConfigurer 是一个接口,通常由用户实现,并且用于配置 Spring MVC。
    • 提供了一系列的回调方法,允许用户在 Spring MVC 中添加自定义配置。
    • 通过实现 WebMvcConfigurer 接口,可以进行一些简单的配置,如添加拦截器、添加视图控制器、配置视图解析器等。
  2. WebMvcConfigurationSupport:
    • WebMvcConfigurationSupport 是一个类,它是 WebMvcConfigurerAdapter 的后继者(WebMvcConfigurerAdapter 已在 Spring 5.0 中标记为过时)。
    • 可以继承 WebMvcConfigurationSupport 类,覆盖其中的方法,实现更详细和复杂的配置。
    • WebMvcConfigurationSupport 提供了一些模板方法,允许用户在配置中进行更精细的控制。
  3. 总结:
    WebMvcConfigurer更加灵活,提供了一系列的回调方法供用户配置,而WebMvcConfigurationSupport则更为底层,提供了更多的细粒度的配置选项,允许用户更深入地定制 Spring MVC 的行为。通常情况下,优先选择使用WebMvcConfigurer,只有在需要更高级的自定义配置时才考虑使用 WebMvcConfigurationSupport`。

二.主要功能和用途

WebMvcConfigurer 接口提供了一系列的默认方法,你可以重写这些方法来配置 Spring MVC。以下是一些主要功能:

  1. 配置视图解析器(View Resolvers):定制如何解析视图名称。
  2. 添加静态资源处理:配置静态资源的处理,比如 CSS、JavaScript、图片等。
  3. 配置跨域请求(CORS):允许或限制跨域请求。
  4. 添加拦截器(Interceptors):在请求处理之前或之后执行自定义逻辑。
  5. 配置内容协商:定制请求和响应的内容类型(如 JSON、XML)。
  6. 添加格式化程序和转换器(Formatters and Converters):定制数据绑定和类型转换。
  7. 全局异常处理:配置全局异常处理器。
  8. 配置消息转换器(Message Converters):定制请求和响应的消息转换逻辑。

三.代码示例

@Configuration // 表示这是一个Spring配置类
public class WebConfig implements WebMvcConfigurer {

    // 配置视图解析器
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp"); // 配置JSP视图解析器,设置视图存放的目录和文件后缀
    }

    // 添加静态资源处理
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**") // 设置静态资源的URL路径模式
                .addResourceLocations("classpath:/static/"); // 设置静态资源的存放位置
    }

    // 配置跨域请求
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许对所有URL进行跨域请求
                .allowedOrigins("https://example.com") // 设置允许跨域请求的来源
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 设置允许的HTTP方法
                .allowedHeaders("*"); // 允许任何头部信息
    }

    // 添加拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册自定义拦截器,并设置拦截和排除的路径
        registry.addInterceptor(new MyCustomInterceptor()) // 添加自定义拦截器
                .addPathPatterns("/**") // 对所有URL路径应用拦截器
                .excludePathPatterns("/login", "/register"); // 排除登录和注册页面的URL
    }

    // 配置内容协商
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorParameter(true) // 启用请求参数来决定返回的内容类型
                  .parameterName("mediaType") // 设置用于内容协商的请求参数名称
                  .defaultContentType(MediaType.APPLICATION_JSON) // 设置默认内容类型为JSON
                  .mediaType("xml", MediaType.APPLICATION_XML) // 设置XML内容类型的参数值
                  .mediaType("json", MediaType.APPLICATION_JSON); // 设置JSON内容类型的参数值
    }

    // 添加格式化程序和转换器
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new MyCustomFormatter()); // 添加自定义格式化程序
        registry.addConverter(new MyCustomConverter()); // 添加自定义转换器
    }

    // 全局异常处理
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(new MyGlobalExceptionHandler()); // 添加自定义的全局异常处理器
    }

    // 配置消息转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new MappingJackson2HttpMessageConverter()); // 添加消息转换器,用于处理JSON
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值