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 ...
随机推荐
- BUUOJ WEB(1)
[ACTF2020 新生赛]Include 开启环境之后点击tips 可以在url中看到格式为: ?file=flag.php 加上题目是include,可以猜测是文件包含漏洞 http://a291 ...
- ADF 第二篇:使用UI创建ADF
用户可以通过UI来创建ADF,在UI中创建ADF时,用户不需要下载单独的IDE,而仅仅通过 Microsoft Edge 或者 Google Chrome浏览器.用户登录Azure Portal,选择 ...
- 团队作业part5--测试与发布(Alpha版本)
测试报告 1.测试与解决bug 1)测试人员测试出的bug 游戏失败后方块还能下落 分数设计不太合理 存在行数不可消除的情况 2)开发人员解决bug 2.场景测试 适用群体:打发时间的学生.工作压力大 ...
- watch监听对象的属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Unity发布WebGL改变鼠标样式
记录:前段时间遇到一个需求,就是打包出来要在某种情况下鼠标的样子要改变成想要的样式. 详细代码如下 public Texture2D[] hand;//小指图标 /// <summary> ...
- AcWing 317. 陨石的秘密
1 -> {} 2 -> [] 3 -> () \(f[d][a][b][c]\) 表示 \([i * 2 - 1, j * 2]\) 这段区间 深度为 d \(1\) 有 \(a\ ...
- 刚开始学习Javascript的一些基础小知识,从入门到崩溃,希望对大家有帮助(只适合初学者)
一.简介 1.JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,js不能操作文件. 重要的开始啦!!!!! 引入javascript: 行间js <d ...
- redis 常用基本命令
redis 常用基本命令 redis-cli 启动set 键 值 # 存储 单条数据 # set 'zsj' 'bab' get 键 # 通过键获取值 # get ...
- 使用Jmeter测试thrift接口
术语描述 jmeter:一款性能压力测试工具,支持多种协议,java .http 等,但是不支持thrift thrift:跨语言的RPC调用框架,提供编译器,可以将thrift接口生成不同语言的接口 ...
- Flink读写Redis(三)-读取redis数据
自定义flink的RedisSource,实现从redis中读取数据,这里借鉴了flink-connector-redis_2.11的实现逻辑,实现对redis读取的逻辑封装,flink-connec ...