自学内容网 自学内容网

WebMvcConfigurer自定义配置

1. WebMvcConfigurer(轻量级扩展配置)

1.1 简介

WebMvcConfigurer 是 Spring 提供的接口,用于扩展 Spring MVC 的默认行为。它是一种非侵入式的配置方式,可以轻松地进行各种自定义配置,如拦截器、消息转换器、跨域设置等。实现 WebMvcConfigurer 不会影响 Spring Boot 的自动配置,是最常见的扩展方式。

1.2 常用功能

  • 自定义拦截器:通过实现 addInterceptors 方法添加拦截器。
  • 自定义消息转换器:通过 extendMessageConverters 方法扩展消息转换器。
  • 跨域配置:通过 addCorsMappings 来配置跨域资源共享(CORS)。
  • 静态资源配置:通过 addResourceHandlers 自定义静态资源的路径。

1.3 使用场景

WebMvcConfigurer 适合大部分场景,可以满足自定义消息转换器、静态资源映射、拦截器等常见需求,且不会影响 Spring Boot 的自动配置。

2. WebMvcConfigurationSupport(深度定制配置)

2.1 简介

WebMvcConfigurationSupport 是 Spring MVC 的一个配置基类,通常用于完全接管 Spring MVC 的配置。继承这个类后,Spring Boot 自动配置将被禁用,因此它适用于需要完全控制 Spring MVC 行为的场景。

2.2 常用功能

  • 深度定制 Spring MVC 行为:继承该类后,所有 Spring MVC 的配置都需要手动定义,包括视图解析器、消息转换器、拦截器等。
  • 完全覆盖 Spring MVC 默认配置:Spring Boot 的自动配置会失效,需要自行配置所有必要的 MVC 组件。

2.3 使用场景

  • 需要完全掌控 Spring MVC 行为的复杂场景。
  • WebMvcConfigurer 不能满足定制需求时(如需要重写默认的 MVC 配置)。

注意:继承 WebMvcConfigurationSupport 会导致 Spring Boot 的自动配置失效,因此大部分开发中更推荐使用 WebMvcConfigurer

3. 示例

通过实现WebMvcConfigurer接口的 extendMessageConverters 方法扩展消息转换器。

自定义消息转换器(日期格式处理):

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration // 表明这是一个 Spring 配置类,Spring 容器会自动扫描并加载该配置
public class WebConfig implements WebMvcConfigurer {

    /**
     * 扩展 Spring MVC 框架的消息转换器
     * 这里是通过自定义 Jackson 的 `MappingJackson2HttpMessageConverter` 来处理 JSON 数据
     * 并为其设置自定义的日期格式
     * 
     * @param converters Spring MVC 自动传入的消息转换器列表
     */
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 输出日志,提示消息转换器正在被扩展
        log.info("扩展消息转换器...");
        
        // 创建一个 JSON 消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        
        // 创建一个 ObjectMapper(这是 Jackson 用于将 Java 对象和 JSON 相互转换的工具类)
        ObjectMapper objectMapper = new ObjectMapper();
        
        // 设置日期格式为 "yyyy-MM-dd HH:mm:ss",即:2024-10-15 12:34:56
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        
        // 将配置好的 ObjectMapper 设置到消息转换器中
        converter.setObjectMapper(objectMapper);
        
        // 将自定义的消息转换器添加到转换器列表的最前面
        // 这样 Spring MVC 会优先使用这个自定义的转换器
        converters.add(0, converter);
    }
}

详细解释

  1. @Configuration 注解
    该注解表明 WebConfig 是一个配置类,Spring 会在启动时自动加载该类并执行其中的配置逻辑。

  2. WebMvcConfigurer 接口
    这是一个用于扩展和自定义 Spring MVC 行为的接口,不会覆盖 Spring 的默认配置。这里实现了 extendMessageConverters 方法,主要是为了自定义消息转换器。

  3. extendMessageConverters(List<HttpMessageConverter<?>> converters) 方法

    • 这个方法允许在 Spring MVC 的默认消息转换器列表中插入或替换自定义的消息转换器。
    • converters 参数是 Spring MVC 默认提供的消息转换器列表。
  4. MappingJackson2HttpMessageConverter
    这是一个专门用于将 Java 对象转换为 JSON 格式,以及将 JSON 解析为 Java 对象的消息转换器。Spring 默认使用 Jackson 作为 JSON 序列化和反序列化的工具。

  5. ObjectMapper

    • Jackson 的核心类,用于配置和执行对象和 JSON 之间的相互转换。
    • 在这里通过 setDateFormat 方法设置了全局的日期格式,所有涉及日期的字段都会被转换为 yyyy-MM-dd HH:mm:ss 格式。
  6. converters.add(0, converter)

    • 该语句将自定义的消息转换器添加到 converters 列表的最前面。这样可以保证 Spring 优先使用我们自定义的转换器来处理请求和响应中的 JSON 数据。

原文地址:https://blog.csdn.net/qq_46637011/article/details/142964621

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!