SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)生成路由前綴的實(shí)現(xiàn)代碼
前言
本文介紹如何根據(jù)目錄結(jié)構(gòu)給RequestMapping添加路由前綴(覆蓋RequestMappingHandlerMapping中的getMappingForMethod方法,修改其中的Url),如下圖的實(shí)際訪問路徑為:/v1/test/test。
具體實(shí)現(xiàn)
配置文件指定基礎(chǔ)包
application.properties
api-package = com.coisini.springbootlearn.controller
自動(dòng)補(bǔ)全路由前綴處理類
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 自動(dòng)補(bǔ)全路由前綴處理類 * RequestMappingHandlerMapping 負(fù)責(zé)處理標(biāo)注了@RequestMapping的控制器 * @author coisini * @date Aug 10, 2021 * @Version 1.0 */ public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping { /** * 讀取基礎(chǔ)包配置 */ @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() 根據(jù)前綴生成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; } }
自動(dòng)補(bǔ)全路由前綴配置類
AutoPrefixConfiguration.java
/** * @Description 自動(dòng)補(bǔ)全路由前綴配置類 * 通過接口的形式主動(dòng)發(fā)現(xiàn) * @author coisini * @date Aug 10, 2021 * @Version 1.0 */ @Component public class AutoPrefixConfiguration implements WebMvcRegistrations { @Override public RequestMappingHandlerMapping getRequestMappingHandlerMapping() { return new AutoPrefixUrlMapping(); } }
測(cè)試類
@RestController @RequestMapping("/test") public class TestController { @GetMapping(value = "/test") public String test(){ return "hello"; } }
測(cè)試
目錄結(jié)構(gòu)如下
訪問結(jié)果
目錄結(jié)構(gòu)變更
訪問結(jié)果
到此這篇關(guān)于SpringBoot - 根據(jù)目錄結(jié)構(gòu)自動(dòng)生成路由前綴的文章就介紹到這了,更多相關(guān)SpringBoot目錄結(jié)構(gòu)路由前綴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼
- SpringBoot集成Mybatis-plus并實(shí)現(xiàn)自動(dòng)生成相關(guān)文件的示例代碼
- Springboot Mybatis Plus自動(dòng)生成工具類詳解代碼
- SpringBoot項(xiàng)目使用mybatis-plus逆向自動(dòng)生成全套代碼
- SpringBoot整合Mybatis Generator自動(dòng)生成代碼
- springboot整合freemarker代碼自動(dòng)生成器
- SpringBoot整合screw實(shí)現(xiàn)數(shù)據(jù)庫文檔自動(dòng)生成的示例代碼
- springboot 通過代碼自動(dòng)生成pid的方法
- SpringBoot+MyBatis-Plus+Velocity實(shí)現(xiàn)代碼自動(dòng)生成
相關(guān)文章
詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié)
這篇文章主要介紹了詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11java.net.UnknownHostException異常的一般原因及解決步驟
關(guān)于java.net.UnknownHostException大家也許都比較熟悉,這篇文章主要給大家介紹了關(guān)于java.net.UnknownHostException異常的一般原因及解決步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02Java實(shí)現(xiàn)Http請(qǐng)求的常用方法詳解
在實(shí)際開發(fā)過程中,我們經(jīng)常需要調(diào)用對(duì)方提供的接口或測(cè)試自己寫的接口是否合適,本文為大家整理了Java調(diào)用第三方http接口幾種方式,需要的可以參考下2025-02-02IntelliJ IDEA打開多個(gè)Maven的module且相互調(diào)用代碼的方法
這篇文章主要介紹了IntelliJ IDEA打開多個(gè)Maven的module且相互調(diào)用代碼的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例
在Maven項(xiàng)目里,我們經(jīng)常需要導(dǎo)入jar包依賴,本文主要介紹了Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08