欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot如何根據(jù)目錄結(jié)構(gòu)生成API接口前綴

 更新時間:2022年02月18日 10:17:32   作者:Y7000也拯救不了我  
這篇文章主要介紹了SpringBoot如何根據(jù)目錄結(jié)構(gòu)生成API接口前綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、根據(jù)目錄結(jié)構(gòu)生成接口前綴

在寫api的接口時,通常有很多版本的迭代,比如:v1、v2。

如圖所示,建立的包結(jié)構(gòu)。

列舉v1版本,每新建一個controller都要寫上@RequestMapping("/v1/****")的路由的前綴,如果v1下面還有幾個包結(jié)構(gòu),這樣路由就要寫的很麻煩。

我們可以通過當前api下的目錄結(jié)構(gòu)自動加上請求前綴。

二、自定義RequestMappingInfo

在Spring里有一個專門處理擁有@RequestMapping()注解的控制器的類(RequestMappingHandlerMapping),因為我們要修改控制器的路由。

  • 寫一個類繼承RequestMappingHandlerMapping,重寫類的getMappingForMethod方法。這個方法就是定義和生成路由。
  • 調(diào)用基類的getMappingForMethod方法就能拿到RequestMappingInfo 的路由信息,先接受信息,修改完了,再返回。
  • 這里要進行路由前綴的修改,封裝一個方法getPrefix(),而handlerType這個參數(shù)就是獲取控制器的信息。
  • 獲取控制器的目錄結(jié)構(gòu),進行替換,保留api目錄之后的路徑。
  • 這里的apiPackagePath,就是com.api。指定api是所有api的根目錄。
  • 獲取到的請求路徑是.,替換為/。
  • 得到了prefix前綴,修改MappingInfo。通過RequestMappingInfo的靜態(tài)方法合并url。
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
    @Value("${api-package}")
    private String apiPackagePath;
    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
        RequestMappingInfo mappingForMethod = super.getMappingForMethod(method, handlerType);
        String prefix = getPrefix(handlerType);
        if (mappingForMethod!=null){
           return RequestMappingInfo.paths(prefix).build().combine(mappingForMethod);
        }
        return mappingForMethod;
    }
    private String getPrefix(Class<?> handlerType){
        String packageName = handlerType.getPackage().getName();
        String doPath = packageName.replaceAll(this.apiPackagePath, "");
        return doPath.replace('.', '/');
    }
}
  • 配置類的方法將AutoPrefixUrlMapping類注入ioc容器中。
  • 新建一個配置類繼承WebMvcRegistrations接口。實現(xiàn)getRequestMappingHandlerMapping方法,直接實例化AutoPrefixUrlMapping。
  • 將配置類加入容器中@Component
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return new AutoPrefixUrlMapping();
    }
}

三、測試

在v1包下新建一個controller

@RestController()
@RequestMapping("/banner")
public class BannerController {
    @GetMapping("/test")
    public String test() {
        return "你好 hello";
    }
}

啟動主程序,測試接口http://localhost:8080/v1/banner/test,

自動合并了路由,v1是自動拼接的。

將controller移動到v2的sample包下,controller的請求路徑?jīng)]有修改。

這是重新服務(wù)再訪問http://localhost:8080/v2/sample/banner/test。

成功訪問,不管目錄多么復(fù)雜都實現(xiàn)了根據(jù)目錄結(jié)構(gòu)生成路由前綴,不用修改控制器的requestMapping。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你了解Java8?Stream流處理中的收集器技巧

    一文帶你了解Java8?Stream流處理中的收集器技巧

    Java?8?引入的?Stream?極大地簡化了集合數(shù)據(jù)的處理,提供了一種現(xiàn)代、函數(shù)式的方式來處理數(shù)據(jù),本文將深入探討?Java?8?Stream?中的收集器,希望對大家有所幫助
    2023-08-08
  • mybatis返回list<Integer>時resultType寫Integer問題

    mybatis返回list<Integer>時resultType寫Integer問題

    這篇文章主要介紹了mybatis返回list<Integer>時resultType寫Integer問題,具有很好的參考價值,希望對大家有所幫助,
    2023-12-12
  • 自己編寫IOC控制反轉(zhuǎn)及AOP面向切面

    自己編寫IOC控制反轉(zhuǎn)及AOP面向切面

    本文展示通過一個案例來自己手寫IOC和AOP代碼,通過銀行轉(zhuǎn)賬案例詳細的代碼編寫和文檔解釋來說明IOC和AOP的思想,會分享存在的問題和解決問題的思路
    2021-06-06
  • Java多線程(單例模式,阻塞隊列,定時器,線程池)詳解

    Java多線程(單例模式,阻塞隊列,定時器,線程池)詳解

    本文是多線程初級入門,主要介紹了多線程單例模式、阻塞隊列、定時器、線程池、多線程面試考點,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • SpringBoot集成Jpa對數(shù)據(jù)進行排序、分頁、條件查詢和過濾操作

    SpringBoot集成Jpa對數(shù)據(jù)進行排序、分頁、條件查詢和過濾操作

    這篇文章主要介紹了SpringBoot集成Jpa對數(shù)據(jù)進行排序、分頁、條件查詢和過濾操作,主要使用Jpa連接數(shù)據(jù)庫對數(shù)據(jù)進行排序、分頁、條件查詢和過濾操作,需要的朋友可以參考下
    2023-05-05
  • Java中MessageFormat的使用詳解

    Java中MessageFormat的使用詳解

    本文主要介紹了Java中MessageFormat的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java接口性能優(yōu)化技巧

    java接口性能優(yōu)化技巧

    這篇文章主要為大家介紹了java接口性能優(yōu)化技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • spring+maven實現(xiàn)郵件發(fā)送

    spring+maven實現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細介紹了spring+maven實現(xiàn)郵件發(fā)送,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • FactoryBean?BeanFactory方法使用示例詳解講解

    FactoryBean?BeanFactory方法使用示例詳解講解

    這篇文章主要為大家介紹了FactoryBean?BeanFactory方法使用示例詳解講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解

    SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解

    這篇文章主要介紹了SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論