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

SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)配置Url前綴方式

 更新時(shí)間:2021年11月19日 14:50:56   作者:三毛村滴雪魚粉  
這篇文章主要介紹了SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)配置Url前綴方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能夠響應(yīng)前端的請(qǐng)求都需要我們主動(dòng)去注冊(cè)到應(yīng)用程序上。而Spring不需要我們自己去注冊(cè),由Spring通過掃描注解的方式去主動(dòng)發(fā)現(xiàn)

自定義RequestMappingInfo

Spring中的RequestMappingHandlerMapping專門來負(fù)責(zé)處理標(biāo)注了@RequestMapping的控制器。創(chuàng)建一個(gè)類繼承并覆蓋其中的方法,從而實(shí)現(xiàn)對(duì)默認(rèn)機(jī)制的修改。

覆蓋其中的getMappingForMethod方法,這個(gè)方法的返回值RequestMappingInfo就包含了請(qǐng)求的Url,修改RequestMappingInfo中的Url從而修改路由中的Url。

package com.lin.missyou.hack;
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;
public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
    @Value("${missyou.api-package}")
    private String apiPackagePath ;		//從配置文件中獲取根包的路徑
    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
        RequestMappingInfo requestMappingInfo = super.getMappingForMethod(method, handlerType);
        if(null != requestMappingInfo){
        	//獲取url前綴
            String prefix = getPrefix(handlerType);		
            //根據(jù)url前綴生成RequestMappingInfo并與原有的RequestMappingInfo合并
            RequestMappingInfo mappingInfo = RequestMappingInfo.paths(prefix).build().combine(requestMappingInfo);		
            return mappingInfo;
        }
        return requestMappingInfo;
    }
    private String getPrefix(Class<?> handlerType){
        String packageName = handlerType.getPackage().getName();	//獲取控制器所在包路徑
        String dotPath = packageName.replaceAll(this.apiPackagePath,"");	//將包路徑中多于的部分截取掉
        return dotPath.replace(".","/");		//將包路徑中的.替換成/
    }
}

通過接口的形式發(fā)現(xiàn)類

創(chuàng)建一個(gè)配置類AutoPrefixConfiguration將AutoPrefixUrlMapping加入到容器。配置類AutoPrefixConfiguration實(shí)現(xiàn)接口WebMvcRegistrations并覆蓋其中的getRequestMappingHandlerMapping方法

package com.lin.missyou.core.config;
import com.lin.missyou.hack.AutoPrefixUrlMapping;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return new AutoPrefixUrlMapping();
    }
}

在配置文件中指定根包

missyou.api-package = com.lin.missyou.api

SprinBoot的 發(fā)現(xiàn)機(jī)制 有兩種。一種是在控制器上標(biāo)注特定注解,例如上一篇文章SpringBoot全局異常處理中在GlobalExceptionAdvice 上標(biāo)注@ControllerAdvice。另外一種是實(shí)現(xiàn)特定接口并覆蓋其中的特定方法,例如上面的AutoPrefixConfiguration。

測(cè)試一下

在這里插入圖片描述

訪問結(jié)果,訪問路徑/v1/banner/test可以訪問到該控制器

在這里插入圖片描述

將訪問路徑改為/banner/test就訪問不到了

在這里插入圖片描述

將BannerController移動(dòng)到sample文件夾下訪問路徑/v1/sample/banner/test可以訪問到該控制器

在這里插入圖片描述

這個(gè)方法存在一些爭(zhēng)議。一方面認(rèn)為根據(jù)目錄結(jié)構(gòu)自動(dòng)生成url雖然比較簡(jiǎn)單,少寫了一些代碼,但是無法通過控制器上標(biāo)注的@RequestMapping中的參數(shù)直接看出url,代碼的可讀性不是太好。

另一方面認(rèn)為,這個(gè)方法大大的簡(jiǎn)化了我們代碼的編寫,同時(shí)更加易于維護(hù),控制器隨意調(diào)整所在目錄都不需要去修改代碼。

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

相關(guān)文章

  • SpringBoot項(xiàng)目使用slf4j的MDC日志打點(diǎn)功能(最新推薦)

    SpringBoot項(xiàng)目使用slf4j的MDC日志打點(diǎn)功能(最新推薦)

    這篇文章主要介紹了SpringBoot項(xiàng)目使用slf4j的MDC日志打點(diǎn)功能,本文通過示例代碼給大家介紹非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Intellij?IDEA如何查看所有斷點(diǎn)

    Intellij?IDEA如何查看所有斷點(diǎn)

    這篇文章主要介紹了Intellij?IDEA如何查看所有斷點(diǎn)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 深入理解Spring AOP

    深入理解Spring AOP

    這篇文章主要介紹了深入理解Spring AOP,詳細(xì)的介紹了spring aop的具體實(shí)現(xiàn)與理論
    2017-01-01
  • MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢

    MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢

    本文主要介紹了MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • 基于Springboot+Netty實(shí)現(xiàn)rpc的方法 附demo

    基于Springboot+Netty實(shí)現(xiàn)rpc的方法 附demo

    這篇文章主要介紹了基于Springboot+Netty實(shí)現(xiàn)rpc功能,在父項(xiàng)目中引入相關(guān)依賴結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 詳解Spring Security的formLogin登錄認(rèn)證模式

    詳解Spring Security的formLogin登錄認(rèn)證模式

    對(duì)于一個(gè)完整的應(yīng)用系統(tǒng),與登錄驗(yàn)證相關(guān)的頁面都是高度定制化的,非常美觀而且提供多種登錄方式。這就需要Spring Security支持我們自己定制登錄頁面,也就是本文給大家介紹的formLogin模式登錄認(rèn)證模式,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • java?poi導(dǎo)入純數(shù)字等格式問題及解決

    java?poi導(dǎo)入純數(shù)字等格式問題及解決

    這篇文章主要介紹了java?poi導(dǎo)入純數(shù)字等格式問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java9中對(duì)集合類擴(kuò)展的of方法解析

    Java9中對(duì)集合類擴(kuò)展的of方法解析

    這篇文章主要介紹了Java9 中對(duì)集合類擴(kuò)展的of方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Springboot vue導(dǎo)出功能實(shí)現(xiàn)代碼

    Springboot vue導(dǎo)出功能實(shí)現(xiàn)代碼

    這篇文章主要介紹了Springboot vue導(dǎo)出功能實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • idea maven編譯報(bào)錯(cuò)Java heap space的解決方法

    idea maven編譯報(bào)錯(cuò)Java heap space的解決方法

    這篇文章主要為大家詳細(xì)介紹了idea maven編譯報(bào)錯(cuò)Java heap space的相關(guān)解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04

最新評(píng)論

城固县| 和平县| 辽源市| 桃园县| 犍为县| 剑河县| 佛学| 民权县| 若羌县| 津南区| 方山县| 延寿县| 金华市| 丹江口市| 施秉县| 巢湖市| 壶关县| 凉城县| 康马县| 衡东县| 琼中| 类乌齐县| 大邑县| 仙游县| 邮箱| 庆元县| 康保县| 中牟县| 连山| 大新县| 大名县| 益阳市| 外汇| 铁岭市| 余干县| 乌鲁木齐县| 美姑县| 克山县| 遂川县| 万源市| 深水埗区|