WebMvcConfigurer
用于自定义和扩展SpringMVC
的功能配置。
比如:可以配置如视图解析器、静态资源处理、消息转换器、拦截器等MVC相关的组件。
实现 WebMvcConfigurer 接口,并使用 @Configuration
注解标记,使其成为一个配置类
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
[实践总结] 拦截器配置(Interceptors)
@Autowired
private ResponsePostInterceptor responsePostInterceptor;
/**
* 为拦截器注册表添加拦截器
*
* @param registry 拦截器注册表
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 在Spring MVC配置中注册一个名为responsePostInterceptor的拦截器,
// 使其能够对匹配路径“/**”(即对应用程序中的所有路径)的请求进行拦截
registry.addInterceptor(responsePostInterceptor).addPathPatterns("/**");
}
视图控制器(View Controllers)
可以添加一些默认的路由规则,当请求特定URL时自动转发到指定视图。
/**
* 向控制器注册表中添加视图控制器
*
* @param registry 控制器注册表
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//对于index.html的请求,设置返回的视图为index.htl
registry.addViewController("/index.html").setViewName("/index.htl");
//所有以.do结尾的请求重定向到/index.html请求
registry.addRedirectViewController("/**/*.do", "/index.html");
}
静态资源处理(Static Resources)
可以配置静态资源如CSS、JavaScript等文件的映射路径
/**
* 用于添加资源处理器
*
* @param registry 资源处理器注册表
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("classpath:/static/resources/")
.setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS));
}
视图解析器(View Resolvers)
可以配置视图解析器链,决定如何将处理结果映射到具体的视图模板。
/**
* 配置视图解析器(ViewResolver),用于在Spring应用程序中自定义如何解析视图
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// 创建 InternalResourceViewResolver 对象
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
// 设置视图资源的前缀为 "/WEB-INF/views/"
resolver.setPrefix("/WEB-INF/views/");
// 设置视图资源的后缀为 ".jsp"
resolver.setSuffix(".jsp");
// 注册视图解析器
registry.viewResolver(resolver);
}
自定义配置HTTP消息转换器列表(Message Converters)
/**
* 用于自定义配置HTTP消息转换器列表
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// StringHttpMessageConverter主要用于处理HTTP请求和响应中的字符串类型数据
converters.add(new StringHttpMessageConverter());
}
为跨域访问添加映射(Cors Mappings)
/**
* 为跨域访问添加映射
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
// 允许所有跨域访问
registry.addMapping ("/**");
// 更为精细的控制
// 仅仅允许来自 domain2.com 的跨域访问,并且限定访问路径为api 、方法是 POST 或者 GET 。
registry.addMapping("/api/**")
.allowedOrigins("http://domain2.com")
.allowedMethods("POST", "GET");
}
自定义的格式化器(Formatter)
@Override
public void addFormatters(FormatterRegistry registry) {
//注册一个日期格式转换器
registry.addConverter(String.class, Date.class, DateUtils::parseDate);
}
自定义参数解析器
/**
* 向SpringMVC框架中添加自定义参数解析器
*
* @param argumentResolvers SpringMVC已有的参数解析器列表,用于处理控制器方法的参数解析工作
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
// 添加一个自定义解析器,它能将请求中的字符串参数转换为Date类型,
// 例如:假设前端传递的是"2022-12-31"这样的日期字符串,通过此解析器可直接注入到控制器方法的Date类型参数中。
argumentResolvers.add(new CustomDateArgumentResolver());
}
Further Reading : What is addArgumentResolvers
does in WebMvcConfigurer
?文章来源:https://www.toymoban.com/news/detail-795140.html
参考
[Ref] springboot-WebMvcConfigurer配置拦截器/跨域/格式化/注册控制器文章来源地址https://www.toymoban.com/news/detail-795140.html
到了这里,关于What is `WebMvcConfigurer` does?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!