SpringBoot根据目录结构自动生成路由前缀的实现代码
前言
本文介绍如何根据目录结构给RequestMapping添加路由前缀(覆盖RequestMappingHandlerMapping中的getMappingForMethod方法,修改其中的Url),如下图的实际访问路径为:/v1/test/test。
具体实现
配置文件指定基础包
application.properties
api-package = com.coisini.springbootlearn.controller
自动补全路由前缀处理类
AutoPrefixUrlMapping.java
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import java.lang.reflect.Method; import java.util.Objects; /** * @Description 自动补全路由前缀处理类 * RequestMappingHandlerMapping 负责处理标注了@RequestMapping的控制器 * @author coisini * @date Aug 10, 2021 * @Version 1.0 */ public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping { /** * 读取基础包配置 */ @Value("${api-package}") private String bathApiPackagePath; /** * 重写方法路由获取 * @param method * @param handlerType * @return */ @Override protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) { RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType); if (Objects.nonNull(mappingInfo)) { String prefix = this.getPrefix(handlerType); /** * RequestMappingInfo.paths(prefix).build() 根据前缀生成mappingInfo * combine(mappingInfo) 拼接原来的mappingInfo */ return RequestMappingInfo.paths(prefix).build().combine(mappingInfo); } return mappingInfo; } /** * 获取方法路由前缀 * @param handleType * @return */ private String getPrefix(Class<?> handleType) { String packageName = handleType.getPackage().getName(); String dotPath = packageName.replace(this.bathApiPackagePath, "").replace(".","/"); return dotPath; } }
自动补全路由前缀配置类
AutoPrefixConfiguration.java
/** * @Description 自动补全路由前缀配置类 * 通过接口的形式主动发现 * @author coisini * @date Aug 10, 2021 * @Version 1.0 */ @Component public class AutoPrefixConfiguration implements WebMvcRegistrations { @Override public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { return new AutoPrefixUrlMapping(); } }
测试类
@RestController @RequestMapping("/test") public class TestController { @GetMapping(value = "/test") public String test(){ return "hello"; } }
测试
目录结构如下
访问结果
目录结构变更
访问结果
到此这篇关于SpringBoot - 根据目录结构自动生成路由前缀的文章就介绍到这了,更多相关SpringBoot目录结构路由前缀内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot SpringSecurity 详细介绍(基于内存的验证)
这篇文章主要介绍了SpringBoot SpringSecurity 介绍(基于内存的验证),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04Spring Cloud Alibaba Nacos两种检查机制
这篇文章主要介绍了Spring Cloud Alibaba Nacos两种检查机制,作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制,下面我们就一起进入文章了解具体详情吧2022-05-05SpringBoot自定义工具类实现Excel数据存入MySQL数据库
这篇文章主要为大家详细介绍了如何使用EasyExcel读取Excel内数据并转换为csv格式数据,然后实现字符串分割,分割出属性名和属性值建表插入MySQL数据库中,感兴趣的可以了解下2024-03-03Spring Boot 的java -jar命令启动原理详解
这篇文章主要介绍了Spring Boot 的java -jar命令启动原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-01-01
最新评论