摘要

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的详情的更多相关文章

  1. SpringBoot——配置类实现WebMvcConfigurer接口来配置拦截器、view-controller、视图解析器等

    目的:为了保留SpringBoot对SpringMVC自动配置,另外我们还想要做一些自己拓展的功能 如何做扩展? 以配置view-controller实现跳转为例: 原先在SpringMvc中我们写v ...

  2. Java豆瓣电影爬虫——抓取电影详情和电影短评数据

    一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...

  3. Android开发案例 - 淘宝商品详情

    所有电商APP的商品详情页面几乎都是和淘宝的一模一样(见下图): 采用上下分页的模式 商品基本参数 & 选购参数在上页展示 商品图文详情等其他信息放在下页展示 知识要点 垂直方向的ViewPa ...

  4. 使用django开发博客过程记录2——博客首页及博客详情的实现

    1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ...

  5. [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

    [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

  6. 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

    一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...

  7. webapi filter过滤器中获得请求的方法详情(方法名,Attributes)

    public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...

  8. 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情

    1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  9. 这交互炸了:饿了么是怎么让Image变成详情页的

    这交互炸了:饿了么是怎么让Image变成详情页的 晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了. 本文同步自wing的地方酒馆 不过还是有槽点.我是无意中才发现可以 ...

随机推荐

  1. Python之爬虫(二十二) Scrapy分布式原理

    关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列. 分布式架 ...

  2. 操作句柄Handle(7)

    可以将Handle理解成访问对象的一个“句柄”.垃圾回收时对象可能被移动(对象地址发生改变),通过Handle访问对象可以对使用者屏蔽垃圾回收细节. Handle涉及到的相关类的继承关系如下图所示. ...

  3. 1731: [Usaco2005 dec]Layout 排队布局*

    1731: [Usaco2005 dec]Layout 排队布局 题意: n头奶牛在数轴上,不同奶牛可以在同个位置处,编号小的奶牛必须在前面.m条关系,一种是两头奶牛距离必须超过d,一种是两头奶牛距离 ...

  4. 【RPA Starter第三课】第一个Uipath项目:HelloWord

    最后是一个小项目,开启使用Uipath.Uipath云平台,Uipath Orchestrator,Uipath Studio,发布项目.怎么启动机器人.都有详细的步骤. Uipath 的账号是通用的 ...

  5. 关于在JSP页面识别不了EL表达式的情况

    今天在JSP页面接收Controller返回的数据user_nickname,使用EL表达式显示数据发现在页面输出的始终是字符串${user_nickname} 经过查阅资料,问题在于使用的web.x ...

  6. Ethical Hacking - GAINING ACCESS(4)

    SERVER SIDE ATTACKS - METASPLOIT Metasploit is an exploit development and execution tool. It can als ...

  7. ES6面试

    未完持续 概念 ECMAScript6(以下简称ES6)是 JavaScript 语言的下一代标准,前者是后者的规格,后者是前者的一种实现. ES6(新增的)一些特性 1.变.常量:let声明变量,c ...

  8. 动手实现一个简单的 rpc 框架到入门 grpc (下)

    之前手动实现了一次简陋的 rpc 调用,为了简单使用了 json 编码信息,其实这是非常不可靠的,go 中 json 解析会有一些问题,比如整数会变成浮点数,而且 json 字符串比较占空间. gRP ...

  9. WinForm微信扫码登录

    源码还需优化,不喜勿喷. 微信官方文档 : https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat ...

  10. 【Gin-API系列】需求设计和功能规划(一)

    场景需求 数据库存储2个模型,每个模型都有一个或多个IP字段,需要通过 Golang Http Api(Restful Api) 返回 IP 信息. 模型1 - 服务器 ID 主机名 IP 内存大小 ...