webMvcConfigurer的详情

Spring的WebMvcConfigurer
接口提供了很多方法让我们来定制SpringMVC的配置。而且Spring还提供了WebMvcConfigurerAdapter
让我们更加优化的去进行配置。我们的配置类可以直接继承WebMvcConfigurerAdapter
来进行配置。
configurePathMatch:匹配路由请求规则
- setUseSuffixPatternMatch : 设置是否是后缀模式匹配,如“/user”是否匹配/user.*,默认为true
- setUseTrailingSlashMatch : 设置是否自动后缀路径模式匹配,如“/user”是否匹配“/user/”,默认为true
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
super.configurePathMatch(configurer);
/*
* 1.ServletMappings 设置的是 "/" 2.setUseSuffixPatternMatch默认设置为true,
* 那么,"/user" 就会匹配 "/user.*",也就是说,"/user.html" 的请求会被 "/user" 的 Controller所拦截.
* 3.如果该值为false,则不匹配
*/
configurer.setUseSuffixPatternMatch(false); /*
* setUseTrailingSlashMatch的默认值为true
* 也就是说, "/user" 和 "/user/" 都会匹配到 "/user"的Controller
*/
configurer.setUseTrailingSlashMatch(true);
}
addFormatters:注册自定义的Formatter和Convert
@Bean
public EnumConverterFactory enumConverterFactory() {
return new EnumConverterFactory();
} /**
* 注册自定义的Formatter和Convert,例如, 对于日期类型,枚举类型的转化.
* 不过对于日期类型,使用更多的是使用
*
* @DateTimeFormat(pattern = "yyyy-MM-dd")
* private Date createTime;
*/
@Override
public void addFormatters(FormatterRegistry registry) {
super.addFormatters(registry);
registry.addConverterFactory(enumConverterFactory());
} /**
* SpringMVC支持绑定枚举值参数。
* 匹配规则 :
* 字符串则尝试根据Enum#name()转换。
* 如果找不到匹配的则返回null
*/
public class EnumConverterFactory implements ConverterFactory<String, Enum> { @Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return new String2EnumConverter(targetType);
} class String2EnumConverter<T extends Enum<T>> implements Converter<String, T> { private Class<T> enumType; private String2EnumConverter(Class<T> enumType) {
this.enumType = enumType;
} @Override
public T convert(String source) {
if (source != null && !source.isEmpty()) {
try {
return Enum.valueOf(enumType, source);
} catch (Exception e) {
}
}
return null;
}
}
}
addArgumentResolvers:添加自定义方法参数处理器
需求:想要在Controller的参数列表中注入当前回话的自定义PlatformSession对象。
@Getter
@Setter
public class PlatformSession<T> {
private T id;
private String username;
private int expireTime;
}
解决方法:创建自定义参数处理器,通过addArgumentResolvers添加到SpringMVC中。
自定义参数处理器
public class PlatformSessionArgumentResolvers implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return PlatformSession.class.equals(methodParameter.getClass());
} @Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
return PlatformSessionUtil.getSession(request);
}
}
配置类
@Bean
PlatformSessionArgumentResolvers platformSessionArgumentResolvers() {
return new PlatformSessionArgumentResolvers();
} @Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(platformSessionArgumentResolvers());
}
addViewControllers:添加自定义视图控制器
@Override
public void addViewControllers(ViewControllerRegistry registry) {
super.addViewControllers(registry);
// 对 "/hello" 的 请求 redirect 到 "/home"
registry.addRedirectViewController("/hello", "/home");
// 对 "/admin/**" 的请求 返回 404 的 http 状态
registry.addStatusController("/admin/**", HttpStatus.NOT_FOUND);
// 将 "/home" 的 请求响应为返回 "home" 的视图
registry.addViewController("/home").setViewName("home");
}
addResourceHandlers:添加静态资源处理器
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
// 通过 "/home.html" 请求, 来访问 /resource/static/home.html 静态资源
registry.addResourceHandler("/home.html").addResourceLocations("classpath:/static/home.html");
}
作者:土豆了解一下
链接:https://www.jianshu.com/p/52f39b799fbb
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
webMvcConfigurer的详情的更多相关文章
- SpringBoot——配置类实现WebMvcConfigurer接口来配置拦截器、view-controller、视图解析器等
目的:为了保留SpringBoot对SpringMVC自动配置,另外我们还想要做一些自己拓展的功能 如何做扩展? 以配置view-controller实现跳转为例: 原先在SpringMvc中我们写v ...
- Java豆瓣电影爬虫——抓取电影详情和电影短评数据
一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...
- Android开发案例 - 淘宝商品详情
所有电商APP的商品详情页面几乎都是和淘宝的一模一样(见下图): 采用上下分页的模式 商品基本参数 & 选购参数在上页展示 商品图文详情等其他信息放在下页展示 知识要点 垂直方向的ViewPa ...
- 使用django开发博客过程记录2——博客首页及博客详情的实现
1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文
一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...
- webapi filter过滤器中获得请求的方法详情(方法名,Attributes)
public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...
- 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- 这交互炸了:饿了么是怎么让Image变成详情页的
这交互炸了:饿了么是怎么让Image变成详情页的 晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了. 本文同步自wing的地方酒馆 不过还是有槽点.我是无意中才发现可以 ...
随机推荐
- 机器学习实战基础(十):sklearn中的数据预处理和特征工程(三) 数据预处理 Preprocessing & Impute 之 缺失值
缺失值 机器学习和数据挖掘中所使用的数据,永远不可能是完美的.很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的 ...
- Python之爬虫从入门到放弃(十三) Scrapy框架整体的了解
这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...
- bzoj3155Preprefix sum
bzoj3155Preprefix sum 题意: 询问一个数组前缀和数组的前缀和,支持单点修改. 题解: SSi=sigma(i,1,n)(n-i+1)*ai=(n+1)*Si-sigma(i,1, ...
- C++ 深搜调错
因为前两天某网站的比赛一个深搜错了,我只得了3等奖,我找不到错误,给别的大佬看他们又嫌恶心.emm……,比赛结束后我自己反思了一下,深搜写错了该怎么办,或者说怎样避免写错. 首先,变量名不要太ex,比 ...
- SparkCore
一.概述 1,定义 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可分区.里面的元素可 ...
- flask下直接展示mysql数据库 字段
在工作中,会导出一份mysql的html来查看,用的是就是路过秋天大神的那个工具,所以想自己用那个样式直接在后端写一个页面做展示! 前端页面 from flask import Flask,reque ...
- Linux版 乐影音下载器(视频下载器) 使用方法
如果你不知道Linux为何物,那么请回去选择前两种下载方式之一. 只提供Linux 64位的乐影音下载器(点击下载),在Linux Mint 19.1 64位.Python 3.6环境下测试能正常运 ...
- Android中Fragment生命周期和基本用法
1.基本概念 1. Fragment是什么? Fragment是可以让你的app纵享丝滑的设计,如果你的app想在现在基础上性能大幅度提高,并且占用内存降低,同样的界面Activity占用内存比Fra ...
- WEB简单的登录注册功能(分层)
登录: 前端页面: <body> <form action="/webtext/LogingServlet" method="post"> ...
- 给我半首歌的时间,给你说明白Immutable List
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...