0.准备

Spring Boot 不仅提供了相当简单使用的自动配置功能,而且开放了非常自由灵活的配置类。Spring MVC 为我们提供了 WebMvcConfigurationSupport 类和一个注解 @EnableWebMvc 以帮助我们减少配置 Bean 的声明。本文简单说明如何自定义 Web MVC 配置。

首先需要使用 @Configuration 将 WebMvcConfig 类标注为 Spring 配置类,示例代码如下:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
//通过重写配置方法覆盖
}

并在启动类上添加 @EnableWebMvc,代码如下:

@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
@EnableWebMvc //启用 Spring MVC 配置
public class SpringBootSsmThymeleafApplication { public static void main(String[] args) {
SpringApplication.run(SpringBootSsmThymeleafApplication.class, args);
}
}

1.静态资源配置

Spring Boot 中默认的静态资源配置,是把类路径下的/static、/public、/resources 和 /METAINF/resources 目录或者 ServletContext 的根目录中的静态文件直接映射为 /****。它使用来自 Spring MVC 的ResourceHttpRequestHandler,以便您可以通过添加自己的WebMvcConfigurer并覆盖addResourceHandlers方法来修改该行为。示例代码如下:

	@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");//静态资源路径 css,js,img等
registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");//视图
registry.addResourceHandler("/mapper/**").addResourceLocations("classpath:/mapper/");//mapper.xml
super.addResourceHandlers(registry);
}

2.拦截器配置

通过重写 addInterceptors() 方法,使用 InterceptorRegistry 注册类来添加拦截器 HandlerInterceptor。示例代码如下:

	@Autowired
private BeforMethodInteceptor beforMethodInteceptor; @Override
public void addInterceptors(InterceptorRegistry registry) {
//注册自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(beforMethodInteceptor) //添加拦截器
.addPathPatterns("/**") //添加拦截路径
.excludePathPatterns(//添加排除拦截路径
"/index",
"/login",
"/doLogin",
"/logout",
"/register",
"/doRegister",
"/**/*.css",
"/**/*.png",
"/**/*.jpeg",
"/**/*.jpg",
"/**/*.ico",
"/**/*.js",
"/swagger-resources/**"
);
super.addInterceptors(registry);
}

3.跨域配置

通过重写 addCorsMappings 方法实现跨域配置的支持,使用 CorsRegistry 注册类添加路径映射。示例代码如下:

	@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")//配置允许跨域的路径
.allowedOrigins("*")//配置允许访问的跨域资源的请求域名
.allowedMethods("PUT,POST,GET,DELETE,OPTIONS")//配置允许访问该跨域资源服务器的请求方法,如:POST、GET、PUT、DELETE等
.allowedHeaders("*"); //配置允许请求header的访问,如 :X-TOKEN
super.addCorsMappings(registry);
}

4.视图控制器配置

通过重写 addViewControllers 方法,使用 ViewControllerRegistry 注册类来实现视图控制器配置。示例代码如下:

	@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("/index");//默认视图跳转
registry.addViewController("/index").setViewName("/index");
registry.addViewController("/article").setViewName("/article");
registry.addViewController("/error/404").setViewName("/error/404");
registry.addViewController("/error/500").setViewName("/error/500");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
super.addViewControllers(registry);
}

上面的代码等同于如下代码:

	@RequestMapping(value = { "/", "/index" })
public String index() {
return "index";
}
@RequestMapping(value = "article")
public String article() {
return "article";
}
@RequestMapping(value = "/error/404")
public String error_404() {
return "/error/404";
}
@RequestMapping(value = "/error/500")
public String error_500() {
return "/error/500";
}

5.消息转换器配置

通过覆盖重写 configureMessageConverters 方法来配置消息转换器。示例代码如下:

自定义字符串转换器:

    @Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
converters.add(converter);
}

自定义fastjson转换器:

	@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
//1.需要定义一个convert转换消息的对象;
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2.添加fastJson的配置信息,比如:是否要格式化返回的json数据;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//3处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//4.在convert中添加配置信息.
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
//5.将convert添加到converters当中.
converters.add(fastJsonHttpMessageConverter);
}

6.数据格式化器配置

通过重写 addFormatters 方法来添加数据格式化器。Spring MVC 接受 HTTP 请求会把参数自动绑定映射到 Controller 请求参数上。Spring 中没有默认配置将字符串转换为日期类型。这时可以通过添加一个 DateFormatter 类来实现自动转换。示例代码如下:

	@Override
public void addFormatters(FormatterRegistry registry) {
super.addFormatters(registry);
registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
}

7.视图解析器配置

通过覆盖重写 configureViewResolvers() 方法来配置视图解析器。代码示例如下:

	@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("");
viewResolver.setSuffix(".html");
viewResolver.setCache(false);
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setOrder(0);
registry.viewResolver(viewResolver);
super.configureViewResolvers(registry);
}

示例代码

码云

非特殊说明,本文版权归 朝雾轻寒 所有,转载请注明出处.

原文标题:Spring Boot 2.X(四):Spring Boot 自定义 Web MVC 配置

原文地址:https://www.zwqh.top/article/info/9

如果文章对您有帮助,请扫码关注下我的公众号,文章持续更新中...

Spring Boot 2.X(四):Spring Boot 自定义 Web MVC 配置的更多相关文章

  1. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  2. Spring Boot 项目学习 (三) Spring Boot + Redis 搭建

    0 引言 本文主要介绍 Spring Boot 中 Redis 的配置和基本使用. 1 配置 Redis 1. 修改pom.xml,添加Redis依赖 <!-- Spring Boot Redi ...

  3. Spring Web MVC 笔记

    Spring Web MVC 流程 Dispatcher Servlet 这是一个前端分派 Servlet(前端控制器模式),外部所有的请求都会先到达这里,然后由其将请求分派给其他组件进行实际的处理. ...

  4. Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  5. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密

      学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA  AES  RSA AES  混合加密  整合   前言:   为了提高安全性采用了RS ...

  6. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  7. Spring Boot 启动(四) EnvironmentPostProcessor

    Spring Boot 启动(四) EnvironmentPostProcessor Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698. ...

  8. 20. Spring Boot 默认、自定义数据源 、配置多个数据源 jdbcTemplate操作DB

    Spring-Boot-2.0.0-M1版本将默认的数据库连接池从tomcat jdbc pool改为了hikari,这里主要研究下hikari的默认配置 0.  创建Spring Boot项目,选中 ...

  9. 学习Spring Boot:(四)应用日志

    前言 应用日志是一个系统非常重要的一部分,后来不管是开发还是线上,日志都起到至关重要的作用.这次使用的是 Logback 日志框架. 正文 Spring Boot在所有内部日志中使用Commons L ...

随机推荐

  1. POJ-3259 Wormholes (ballman_ford 判负环)

    ballman_ford 是对单源点到任意点最短路的处理方法(可以含负权边). 对所有边进行n-1次循环,(n为点得个数),如果此时源点到这条边终点的距离 大于 源点到这条边起点的距离加上路得权值就进 ...

  2. 牛客小白月赛4 C 病菌感染 dfs

    链接:https://www.nowcoder.com/acm/contest/134/C来源:牛客网 题目描述 铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们. 培养皿可 ...

  3. CH 4302 Interval GCD 题解

    题意 给定一个长度为N的数列A,以及M条指令 (N≤5* 10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-, ...

  4. Redis集群下过期key监听

    1. 前言 在使用redis集群时,发现过期key始终监听不到.网上也没有现成的解决方案.于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听.以上做法可 ...

  5. mybatis plus使用redis作为二级缓存

    建议缓存放到 service 层,你可以自定义自己的 BaseServiceImpl 重写注解父类方法,继承自己的实现.为了方便,这里我们将缓存放到mapper层.mybatis-plus整合redi ...

  6. 相同类中方法间调用时日志Aop失效处理

    本篇分享的内容是在相同类中方法间调用时Aop失效处理方案,该问题我看有很多文章描述了,不过大多是从事务角度分享的,本篇打算从日志aop方面分享(当然都是aop,失效和处理方案都是一样),以下都是基于s ...

  7. flex布局笔记整理

    flex布局笔记整理 了解-webkit-box 利用postcss进行css代码的向后兼容时,display:flex兼容后的代码常会带有display:-webkit-box. 部分移动端内核较低 ...

  8. All Of ACM

    数据结构和算法专栏,我会什么写什么  = = 不定时更新 一.数据结构 树状数组详解 线段树详解 二.算法 KMP算法 三.板子 我的代码模板 大整数模板 四.题解报告 几道STL题目(FJUT - ...

  9. Linux服务器MySQL安装

    Linux服务器MySQL安装 1. MySQL官网下载如图: 2. 安装MySQL [root@iZ2zebb0428roermd00462Z /]# rpm -ivh https://dev.my ...

  10. Nginx限流

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 在当今流量徒增的互联网时代,很多业务场景都会涉及到高并发.这个时候接口进行限流是非常有必要的,而限流是Ngin ...