最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)生成接口前綴

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

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

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

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

二、自定義RequestMappingInfo

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

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

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

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

相關(guān)文章

最新評(píng)論

鹿泉市| 宁晋县| 江口县| 曲阜市| 五常市| 南汇区| 萝北县| 固始县| 武乡县| 南华县| 如东县| 兰溪市| 延长县| 梨树县| 永泰县| 水城县| 新密市| 凤庆县| 桃江县| 富平县| 古交市| 南华县| 措美县| 桂东县| 香格里拉县| 交口县| 景泰县| 通道| 黑河市| 道真| 英德市| 阿勒泰市| 青神县| 武邑县| 清新县| 花莲市| 漠河县| 博爱县| 绥江县| 根河市| 通化市|