中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何根據目錄結構自動配置Url前綴

發布時間:2022-03-04 11:23:40 來源:億速云 閱讀:335 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“SpringBoot如何根據目錄結構自動配置Url前綴”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SpringBoot如何根據目錄結構自動配置Url前綴”這篇文章吧。

在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能夠響應前端的請求都需要我們主動去注冊到應用程序上。而Spring不需要我們自己去注冊,由Spring通過掃描注解的方式去主動發現

自定義RequestMappingInfo

Spring中的RequestMappingHandlerMapping專門來負責處理標注了@RequestMapping的控制器。創建一個類繼承并覆蓋其中的方法,從而實現對默認機制的修改。

覆蓋其中的getMappingForMethod方法,這個方法的返回值RequestMappingInfo就包含了請求的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);		
            //根據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(".","/");		//將包路徑中的.替換成/
    }
}

通過接口的形式發現類

創建一個配置類AutoPrefixConfiguration將AutoPrefixUrlMapping加入到容器。配置類AutoPrefixConfiguration實現接口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的 發現機制 有兩種。一種是在控制器上標注特定注解,例如上一篇博文 SpringBoot全局異常處理中在GlobalExceptionAdvice 上標注@ControllerAdvice。另外一種是實現特定接口并覆蓋其中的特定方法,例如上面的AutoPrefixConfiguration。

測試一下

SpringBoot如何根據目錄結構自動配置Url前綴

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

SpringBoot如何根據目錄結構自動配置Url前綴

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

SpringBoot如何根據目錄結構自動配置Url前綴

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

SpringBoot如何根據目錄結構自動配置Url前綴

SpringBoot如何根據目錄結構自動配置Url前綴

這個方法存在一些爭議。一方面認為根據目錄結構自動生成url雖然比較簡單,少寫了一些代碼,但是無法通過控制器上標注的@RequestMapping中的參數直接看出url,代碼的可讀性不是太好。

另一方面認為,這個方法大大的簡化了我們代碼的編寫,同時更加易于維護,控制器隨意調整所在目錄都不需要去修改代碼。

以上是“SpringBoot如何根據目錄結構自動配置Url前綴”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

常州市| 共和县| 黔西| 明星| 稻城县| 循化| 佛教| 沙坪坝区| 揭西县| 延津县| 会宁县| 永吉县| 潞西市| 襄垣县| 贵溪市| 蓬溪县| 环江| 栾城县| 宁海县| 阳东县| 阳江市| 灌阳县| 揭东县| 汝阳县| 中山市| 芜湖市| 集贤县| 尚义县| 伊宁市| 宁陕县| 潮州市| 清流县| 科尔| 开封市| 白山市| 浪卡子县| 仁化县| 博野县| 柳州市| 晋州市| 鹤岗市|