WebMvcConfigurer详解

1、什么是WebMvcConfigurer?

WebMvcConfigurer 是 Spring 5 引入的一个接口,它用于在 Spring MVC 中自定义配置。通过实现这个接口,你可以对 Spring MVC 的行为进行高度定制,提供一种方式来修改 Spring MVC 默认的配置,而不需要直接修改 web.xml 或者通过 DispatcherServlet 配置文件。

2、主要应用场景

2.1、 注册拦截器(Interceptors)

1、自定义拦截器实现 HandlerInterceptor

public class MyInterceptor implements HandlerInterceptor {

    // 请求到达处理器之前调用,返回true表示继续处理,返回false表示拦截请求
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Pre-handle: 请求开始之前...");
        // 这里可以做权限验证、日志记录等
        return true; // 继续执行请求
    }

    // 请求处理后,视图渲染之前
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Post-handle: 请求处理之后...");
        // 这里可以修改模型数据,添加数据到视图等
    }

    // 请求处理完成后,渲染视图之后执行,通常用于清理资源
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("After-completion: 请求完成之后...");
        // 这里可以进行资源清理等工作
    }
}

2、通过实现 addInterceptors 方法,你可以注册一个或多个拦截器。

public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())  // 注册自定义的拦截器
                .addPathPatterns("/**")  // 拦截所有请求
                .excludePathPatterns("/login", "/static/**"); // 排除某些路径
    }
}

2.2、配置静态资源处理(Static Resources Handling)

使用 addResourceHandlers 方法,你可以为静态资源配置处理规则,指定静态资源的访问路径。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/static/");  // 配置静态资源的目录
}

2.3、跨域配置(CORS)

使用 addCorsMappings 方法,你可以配置允许跨域请求的路径和相关设置。

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")  // 所有路径
            .allowedOrigins("http://localhost:8080")  // 允许的来源
            .allowedMethods("GET", "POST")  // 允许的请求方法
            .allowedHeaders("*");  // 允许的请求头
}

2.4、配置视图解析器(View Resolver)

你可以通过 configureViewResolvers 方法来配置 Spring MVC 的视图解析器。

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.jsp().prefix("/WEB-INF/views/").suffix(".jsp");  // 配置 JSP 视图解析器
}

2.5、配置消息转换器(Message Converters)

通过 configureMessageConverters 方法,你可以定制 HTTP 消息转换器,例如 JSON 和 XML 的转换。

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new MappingJackson2HttpMessageConverter());  // 添加 Jackson 解析器来处理 JSON
}

2.6、添加格式化器和转换器(Formatters and Converters)

通过 addFormatters 方法,你可以添加自定义的格式化器和转换器。

@Override
public void addFormatters(FormatterRegistry registry) {
    registry.addConverter(new MyCustomConverter());  // 添加自定义的转换器
}

3、总结

WebMvcConfigurer 是 Spring 5 引入的一个接口,它用于定制 Spring MVC 的行为,使得开发者能够更加灵活地修改和扩展 Spring MVC 默认的配置。
它提供了多种方法,可以定制拦截器、视图解析器、静态资源处理、消息转换器、CORS 配置等。
使用 WebMvcConfigurer 可以让你无需修改 Spring 源代码,就能轻松定制 Spring MVC 的行为。
在 Spring Boot 中,@Configuration 注解的配置类通常实现 WebMvcConfigurer 来进行这些配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值