@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自动加载路由前缀相关推荐

  1. SpringBoot项目中自动加载datasourceConfig配置导致启动失败

    在自己学习搭建SpringBoot的项目中并没有使用到数据库,但在启动的时候报没有找到数据源,网上查了一下发现原因是SpringBoot项目启动时会自动加载datasourceConfig配置 经过尝 ...

  2. SpringBoot通过配置文件自动加载到map中

    看到标题我都不知道我在说啥,有一个需求,需要在配置文件中,配置一些映射,然后把这个映射加载到map中. dashboard:monitor:zhangsan: laodalisi: laoxiao 如 ...

  3. 关于spring自动加载的那点事儿

    背景 惯例要讲一下背景,毕竟问题来源于生活,困难滋生于工作,要是每天吃吃喝喝.无忧无虑,我相信我也没什么问题好写了^_^公司架构组在推新的基础框架,主要是嫌以前的框架用起来太啰嗦了,做了很多感觉多余的 ...

  4. php自动加载类与路由,PHP实现路由与类自动加载步骤详解

    这次给大家带来PHP实现路由与类自动加载步骤详解,PHP实现路由与类自动加载步骤详解的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php def ...

  5. php zend 自动补全,Zend Framework自动加载、简单路由配置(Bootstrap.php)

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /* * 自动加载 */ protected function _init ...

  6. php自动加载类与路由,PHP实现路由和类自动加载

    这次给大家带来PHP实现路由和类自动加载,PHP实现路由和类自动加载的注意事项有哪些,下面就是实战案例,一起来看一下. 项目目录如下 入口文件index.php<?php define('WEB ...

  7. springboot是如何实现配置文件自动加载的呢

    springboot提倡: 约定大于配置 springboot最常见的面试题: 1.springboot是如何实现自动加载配置呢? 2.如何写一个starter呢? 带着问题,我们以mybatis-s ...

  8. nodejs动态加载路由

    Nodejs动态加载路由,Nodejs遍历目录,Nodejs路由工具 工具来源: Nodejs需要手动加载路由文件,如果一个个添加,项目逐渐扩大,比较麻烦. 尤其在项目route目录下,增加模块文件夹 ...

  9. PHP PSR-4 Autoloader 自动加载(中文版)

    引用:https://segmentfault.com/a/1190000002521658 Autoloader 关键词 "必须"("MUST")." ...

最新文章

  1. ROS控制无人机offboard模式
  2. Google工作10年,关于技术、管理和职场生涯的一些感悟
  3. srs audio sandbox 注册机_Windows10自带 Sandbox软件测试必备技巧
  4. c 语言文字输出函数,c/c++语言中文字输出函数总结
  5. c 语言常用宏定义 模板
  6. git cherry-pick 详解 —— Git 学习笔记 18
  7. nginx利用image_filter动态生成缩略图
  8. 50个Android应用!Win11支持运行了
  9. 郑州财税金融职业学院的计算机考试,郑州财税金融职业学院考试流程
  10. (器) 构建自由通行的IOS开发者地图
  11. bootstrap 兼容哪些浏览器
  12. Angular2或Angular4使用echarts , ngx-echarts的方法
  13. Laravel 深入核心系列教程
  14. python和java学哪个好-Python和Java两门编程语言,学习哪个更好?
  15. Ghostscript沙箱绕过(CVE-2021-3781)分析
  16. 眼科准分子激光治疗仪行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. 关于文章手把手教你使用stata做竞争风险模型的一些其他操作
  18. java面试题:重写和重载的区别——详解
  19. matlab程序运行不停,MATLAB一直运行是为什么?
  20. 双端队列--------------------------------思维(性质)

热门文章

  1. java获取天气预报数据
  2. nbsp;和空格区别及去除区别
  3. user 前端movie/movieClassics.Vue实现和电影列表的渲染
  4. https信鸽李雷韩梅梅
  5. tf.nn.dynamic_rnn的输出outputs和state含义
  6. 米格实验室助力医工结合
  7. macOS Sonoma 14 beta 2 (23A5276g) ISO、IPSW、PKG 下载
  8. 仙女座:元宇宙商业生态系统发布背景
  9. 概率密度估计方法-核密度估计和高斯混合分布
  10. begining...