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

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

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

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

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

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

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

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

二、自定義RequestMappingInfo

在Spring里有一個(gè)專(zhuān)門(mén)處理?yè)碛蠤RequestMapping()注解的控制器的類(lèi)(RequestMappingHandlerMapping),因?yàn)槲覀円薷目刂破鞯穆酚伞?/p>

  • 寫(xiě)一個(gè)類(lèi)繼承RequestMappingHandlerMapping,重寫(xiě)類(lèi)的getMappingForMethod方法。這個(gè)方法就是定義和生成路由。
  • 調(diào)用基類(lèi)的getMappingForMethod方法就能拿到RequestMappingInfo 的路由信息,先接受信息,修改完了,再返回。
  • 這里要進(jìn)行路由前綴的修改,封裝一個(gè)方法getPrefix(),而handlerType這個(gè)參數(shù)就是獲取控制器的信息。
  • 獲取控制器的目錄結(jié)構(gòu),進(jìn)行替換,保留api目錄之后的路徑。
  • 這里的apiPackagePath,就是com.api。指定api是所有api的根目錄。
  • 獲取到的請(qǐng)求路徑是.,替換為/。
  • 得到了prefix前綴,修改MappingInfo。通過(guò)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('.', '/');
    }
}
  • 配置類(lèi)的方法將AutoPrefixUrlMapping類(lèi)注入ioc容器中。
  • 新建一個(gè)配置類(lèi)繼承WebMvcRegistrations接口。實(shí)現(xiàn)getRequestMappingHandlerMapping方法,直接實(shí)例化AutoPrefixUrlMapping。
  • 將配置類(lèi)加入容器中@Component
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return new AutoPrefixUrlMapping();
    }
}

三、測(cè)試

在v1包下新建一個(gè)controller

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

啟動(dòng)主程序,測(cè)試接口http://localhost:8080/v1/banner/test,

自動(dòng)合并了路由,v1是自動(dòng)拼接的。

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

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

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

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

相關(guān)文章

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

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

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

    mybatis返回list<Integer>時(shí)resultType寫(xiě)Integer問(wèn)題

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

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

    本文展示通過(guò)一個(gè)案例來(lái)自己手寫(xiě)IOC和AOP代碼,通過(guò)銀行轉(zhuǎn)賬案例詳細(xì)的代碼編寫(xiě)和文檔解釋來(lái)說(shuō)明IOC和AOP的思想,會(huì)分享存在的問(wèn)題和解決問(wèn)題的思路
    2021-06-06
  • Java多線(xiàn)程(單例模式,阻塞隊(duì)列,定時(shí)器,線(xiàn)程池)詳解

    Java多線(xiàn)程(單例模式,阻塞隊(duì)列,定時(shí)器,線(xiàn)程池)詳解

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

    SpringBoot集成Jpa對(duì)數(shù)據(jù)進(jìn)行排序、分頁(yè)、條件查詢(xún)和過(guò)濾操作

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

    Java中MessageFormat的使用詳解

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

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

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

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

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

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

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

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

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

最新評(píng)論