SpringBoot自动加载路由前缀
@RequestMapping() 将controller注册到容器中时需要加入路由地址,如果项目层数较深,地址会非常的长,并且有很多一样的路由前缀,每写一个controller都要重复一遍非常的麻烦,既然Spring这么强大,有没有什么机制可以自动生成路由前缀?
思路:如何可以在@RequestMapping中不加URL前缀------>我们可以让配置类自动加入前缀
既然用@RequestMapping()可以注册路由,那肯定有一个对应的配置类可以修改路由地址。
RequestMappingHandlerMapping应运而生。我们需要写一个配置类继承RequestMappingHandlerMapping并重写其中的getMappingForMethod方法。
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
//missyou.api-package = com.chauncy.missyou.api 写在application.properties中
@Value("${missyou.api-package}")
private String apiPackagePath;
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
//我们所需的路由信息在handlerType中
RequestMappingInfo mappingForMethod = super.getMappingForMethod(method, handlerType);
if (mappingForMethod != null) {
String prefix = this.getPrefix(handlerType);
//这里prefix = "/v1"但远远不够还要加上路由的自己设的地址
return RequestMappingInfo.paths(prefix).build().combine(mappingForMethod);
}
return null;
}
private String getPrefix(Class<?> handlerType) {
String packName = handlerType.getPackage().getName();
//为什么这么处理?因为我们只需要和入口文件同级的包名,packName为该路由的完整包名
//packname = com.chauncy.missyou.api.v1 而我们只需要v1这个前缀,
String newPackName = packName.replaceAll(this.apiPackagePath, "");
return newPackName.replace(".", "/");
}
}
注意事项:不能简单的把这个配置类直接用Component注解加载到容器中
需要使用接口形式加载到容器中
@Component
public class AutoPrefixUrlMappingConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new AutoPrefixUrlMapping();
}
}
为什么?因为是这个类设计的时候规定的
protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
return this.webFluxRegistrations != null && this.webFluxRegistrations.getRequestMappingHandlerMapping() != null ? this.webFluxRegistrations.getRequestMappingHandlerMapping() : super.createRequestMappingHandlerMapping();
}
如果getRequestMappingHandlerMapping()返回值为空,就新建一个不做后续处理。
SpringBoot自动加载路由前缀的更多相关文章
- Eclipse下SpringBoot没有自动加载application.properties文件
Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...
- springboot属性类自动加载配置文件中的值
springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取: 类上添加@ConfigurationProperties注解,p ...
- Springboot项目自动加载设置
SpringBoot是允许项目自动加载的,但是需要在pom文件映入依赖库 1.导入依赖库 <dependency> <groupId>org.springframework.b ...
- PHP 自动加载规范PSR-4
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数
很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...
- Yaf框架下类的自动加载
前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载.根据我对Yaf下类的自动加载方式的理解写下这篇博客.由于接触Yaf ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- 遵循PSR-4的自动加载
一.简介 首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更合理.更好维护.可读性更高 ...
- 【PSR规范专题(5)】PSR-4 改进后的自动加载规范
本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...
随机推荐
- 在 CentOS 7 安装 RabbitMQ
一.安装 Erlang RabbitMQ 是使用 Erlang 开发的,所以需要首先安装 Erlang,本文安装其最新版本 添加 repo 文件: sudo vim /etc/yum.repos.d/ ...
- 本地eclipse java api连接远程虚拟机HBase
1.本地与远程连通 无论是域名或者ip都可以,另外需保证HBase在虚拟机集群上正常运行. 2.本地要有一个跟远程相同的hadoop环境 当然不相同,只要兼容也可以,现采用hadoop-2.5.0-c ...
- 第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer
一. 概述 re模块的函数search.match.fullmatch.findall.finditer都是用于搜索文本中是否包含指定模式的串,函数的参数都是一样的,第一个参数是模式串.第二个是搜索文 ...
- 第十四章 web前端开发小白学爬虫
老猿从事IT开发快三十年了,接触互联网也很久了,但自己没有做过web前端开发,只知道与前端开发相关的一些基本概念,如B/S架构.html标签.js脚本.css样式.xml解析.cookies.http ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的windowIcon属性
windowIcon对象为部件对象的属性,但只有窗口对象有效,其他派生对象如pushButtong对象无效. 在windowIcon对象上有如下子属性设置: 这几个子属性实际上是QIcon类中继承的. ...
- [GXYCTF2019] MISC杂项题
buuoj复现 1,佛系青年 下载了之后是一个加密的txt文件和一张图片 分析图片无果,很讨厌这种脑洞题,MISC应该给一点正常的线索加部分脑洞而不是出干扰信息来故意让选手走错方向,当时比赛做这道题的 ...
- 一篇彻底理解JS中的prototype、__proto__与constructor
1.基本类型不是对象(boolean.undefined.number.string) 2.引用类型都是对象(Array,function ,Object) 3.对象是通过函数创建,并且强调,对象字面 ...
- 深入剖析HashMap
前言 很高兴遇见你~ HashMap是一个非常重要的集合,日常使用也非常的频繁,同时也是面试重点.本文并不打算讲解基础的使用api,而是深入HashMap的底层,讲解关于HashMap的重点知识.需要 ...
- XJOI contest 1592
首先 热烈庆祝"CSP-S 2020全国开放赛前冲刺模拟训练题2"圆满结束!!! 感谢大毒瘤颗粒囊的题目.题目还是很不错的,部分分设置的不合理,各种神仙随便 AK ,蒟蒻只能爆零. ...
- 【SPOJ QTREE4】Query on a tree IV(树链剖分)
Description 给出一棵边带权(\(c\))的节点数量为 \(n\) 的树,初始树上所有节点都是白色.有两种操作: C x,改变节点 \(x\) 的颜色,即白变黑,黑变白. A,询问树中最远的 ...