springboot 前缀_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 前缀_SpringBoot自动加载路由前缀相关推荐
- SpringBoot项目中自动加载datasourceConfig配置导致启动失败
在自己学习搭建SpringBoot的项目中并没有使用到数据库,但在启动的时候报没有找到数据源,网上查了一下发现原因是SpringBoot项目启动时会自动加载datasourceConfig配置 经过尝 ...
- SpringBoot通过配置文件自动加载到map中
看到标题我都不知道我在说啥,有一个需求,需要在配置文件中,配置一些映射,然后把这个映射加载到map中. dashboard:monitor:zhangsan: laodalisi: laoxiao 如 ...
- 关于spring自动加载的那点事儿
背景 惯例要讲一下背景,毕竟问题来源于生活,困难滋生于工作,要是每天吃吃喝喝.无忧无虑,我相信我也没什么问题好写了^_^公司架构组在推新的基础框架,主要是嫌以前的框架用起来太啰嗦了,做了很多感觉多余的 ...
- php自动加载类与路由,PHP实现路由与类自动加载步骤详解
这次给大家带来PHP实现路由与类自动加载步骤详解,PHP实现路由与类自动加载步骤详解的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php def ...
- php zend 自动补全,Zend Framework自动加载、简单路由配置(Bootstrap.php)
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /* * 自动加载 */ protected function _init ...
- php自动加载类与路由,PHP实现路由和类自动加载
这次给大家带来PHP实现路由和类自动加载,PHP实现路由和类自动加载的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php define('WEB ...
- springboot是如何实现配置文件自动加载的呢
springboot提倡: 约定大于配置 springboot最常见的面试题: 1.springboot是如何实现自动加载配置呢? 2.如何写一个starter呢? 带着问题,我们以mybatis-s ...
- nodejs动态加载路由
Nodejs动态加载路由,Nodejs遍历目录,Nodejs路由工具 工具来源: Nodejs需要手动加载路由文件,如果一个个添加,项目逐渐扩大,比较麻烦. 尤其在项目route目录下,增加模块文件夹 ...
- PHP PSR-4 Autoloader 自动加载(中文版)
引用:https://segmentfault.com/a/1190000002521658 Autoloader 关键词 "必须"("MUST")." ...
最新文章
- ROS控制无人机offboard模式
- Google工作10年,关于技术、管理和职场生涯的一些感悟
- srs audio sandbox 注册机_Windows10自带 Sandbox软件测试必备技巧
- c 语言文字输出函数,c/c++语言中文字输出函数总结
- c 语言常用宏定义 模板
- git cherry-pick 详解 —— Git 学习笔记 18
- nginx利用image_filter动态生成缩略图
- 50个Android应用!Win11支持运行了
- 郑州财税金融职业学院的计算机考试,郑州财税金融职业学院考试流程
- (器) 构建自由通行的IOS开发者地图
- bootstrap 兼容哪些浏览器
- Angular2或Angular4使用echarts , ngx-echarts的方法
- Laravel 深入核心系列教程
- python和java学哪个好-Python和Java两门编程语言,学习哪个更好?
- Ghostscript沙箱绕过(CVE-2021-3781)分析
- 眼科准分子激光治疗仪行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 关于文章手把手教你使用stata做竞争风险模型的一些其他操作
- java面试题:重写和重载的区别——详解
- matlab程序运行不停,MATLAB一直运行是为什么?
- 双端队列--------------------------------思维(性质)
热门文章
- java获取天气预报数据
- nbsp;和空格区别及去除区别
- user 前端movie/movieClassics.Vue实现和电影列表的渲染
- https信鸽李雷韩梅梅
- tf.nn.dynamic_rnn的输出outputs和state含义
- 米格实验室助力医工结合
- macOS Sonoma 14 beta 2 (23A5276g) ISO、IPSW、PKG 下载
- 仙女座:元宇宙商业生态系统发布背景
- 概率密度估计方法-核密度估计和高斯混合分布
- begining...