深入浅出webmvcconfigurer

一、简介

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
APIQCAPIQC
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相关推荐

  • 深入浅出统计学

    统计学是一门关于收集、分析、解释和呈现数据的学科。它在各行各业都有广泛应用,包括社会科学、医学、自然科学、商业、经济学、政治学等等。深入浅出统计学是指想要学习统计学的人能够理解统计…

    编程 2025-04-25
  • 深入浅出torch.autograd

    一、介绍autograd torch.autograd 模块是 PyTorch 中的自动微分引擎。它支持任意数量的计算图,可以自动执行前向传递、后向传递和计算梯度,同时提供很多有用…

    编程 2025-04-24
  • 深入浅出SQL占位符

    一、什么是SQL占位符 SQL占位符是一种占用SQL语句中某些值的标记或占位符。当执行SQL时,将使用该标记替换为实际的值,并将这些值传递给查询。SQL占位符使查询更加安全,防止S…

    编程 2025-04-24
  • 深入浅出ThinkPHP框架

    一、简介 ThinkPHP是一款开源的PHP框架,它遵循Apache2开源协议发布。ThinkPHP具有快速的开发速度、简便的使用方式、良好的扩展性和丰富的功能特性。它的核心思想是…

    编程 2025-04-24
  • 深入浅出:理解nginx unknown directive

    一、概述 nginx是目前使用非常广泛的Web服务器之一,它可以运行在Linux、Windows等不同的操作系统平台上,支持高并发、高扩展性等特性。然而,在使用nginx时,有时候…

    编程 2025-04-24
  • 深入浅出arthas火焰图

    arthas是一个非常方便的Java诊断工具,包括很多功能,例如JVM诊断、应用诊断、Spring应用诊断等。arthas使诊断问题变得更加容易和准确,因此被广泛地使用。artha…

    编程 2025-04-24
  • 深入浅出AWK -v参数

    一、功能介绍 AWK是一种强大的文本处理工具,它可以用于数据分析、报告生成、日志分析等多个领域。其中,-v参数是AWK中一个非常有用的参数,它用于定义一个变量并赋值。下面让我们详细…

    编程 2025-04-24
  • 深入浅出Markdown文字颜色

    一、Markdown文字颜色的背景 Markdown是一种轻量级标记语言,由于其简单易学、易读易写,被广泛应用于博客、文档、代码注释等场景。Markdown支持使用HTML标签,因…

    编程 2025-04-23
  • 深入浅出runafter——异步任务调度器的实现

    一、runafter是什么? runafter是一个基于JavaScript实现的异步任务调度器,可以帮助开发人员高效地管理异步任务。利用runafter,开发人员可以轻松地定义和…

    编程 2025-04-23
  • 深入浅出TermQuery

    一、TermQuery概述 TermQuery是Lucene中最基本、最简单、最常见的查询方法之一。它完全符合其名字,意味着只能对一个单词进行查询。 TermQuery可以用于搜索…

    编程 2025-04-23

发表回复

登录后才能评论