@Configuration
//启用配置
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
/**
* 注册自定义格式化程序和转换器
* 详细见Formatter
*
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry) {
// registry.addFormatter();
super.addFormatters(registry);
}
/**
* 自定义全局Validator ,当然也可以在本地注册(使用 @InitBinder)
* 详细见Validator
*
* @return
*/
@Override
public Validator getValidator() {
return super.getValidator();
}
/**
* 注册拦截器用用传入的请求
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ThemeChangeInterceptor())
.addPathPatterns("/**").excludePathPatterns("/admin/**");
super.addInterceptors(registry);
}
/**
* 设置跨域限制 和 @CrossOrigin(可用于类以及方法上)的作用一致
*
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("api/**")
.allowedOrigins("http://domain2.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false)
.maxAge(3600);
super.addCorsMappings(registry);
}
/**
* 自定义请求的内容类型解析
*
* @param configurer
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
/* 是否通过请求Url的扩展名来决定media type */
configurer.favorPathExtension(true)
/* 不检查Accept请求头 */
.ignoreAcceptHeader(true)
.parameterName("mediaType")
/* 设置默认的media yype */
.defaultContentType(MediaType.TEXT_HTML)
/* 请求以.html结尾的会被当成MediaType.TEXT_HTML 如 http://localhost:8080/test.html*/
.mediaType("html", MediaType.TEXT_HTML)
/* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON 如 http://localhost:8080/test.json*/
.mediaType("json", MediaType.APPLICATION_JSON);
super.configureContentNegotiation(configurer);
}
/**
* 自定义消息转换器
* 重点了解
*
* @param converters
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
}
/**
* 配置视图
* 下面的例子是 将所有"/"请求直接转发给名字为"home"的视图
*
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
super.addViewControllers(registry);
}
/**
* 配置视图解析器的注册
*
* @param registry
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.enableContentNegotiation(new MappingJackson2JsonView());
registry.jsp();
super.configureViewResolvers(registry);
}
/**
* 从静态资源库位置列表中使用静态资源的快捷方式
* <p>
* 示例:给定以/resource开头的请求,相对路径用于在Web应用程序根目录下或在"/public"
* 下的类路径中和查找和相对于"public"的静态资源,资源的有效期为1年,以确保最大程度使用浏览器缓存
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resource")
.addResourceLocations("public", "classpath:static/")
.setCachePeriod(31556926);
super.addResourceHandlers(registry);
}
/**
* 允许你对许多与URL映射和路径匹配有关的设置进行定制,所有可用的配置选项,
* 请参考 PathMatchConfigurer API文档
*
* @param configurer
*/
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
super.configurePathMatch(configurer);
}
}
Spring mvc 之WebMvcConfigurerAdapter 对mvc的自定义
最新推荐文章于 2023-11-14 10:17:42 发布