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

SpringBoot根據(jù)目錄結構自動配置Url前綴方式

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

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

自定義RequestMappingInfo

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

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

測試一下

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

相關文章

  • 淺談JVM內存溢出原因和解決思路

    淺談JVM內存溢出原因和解決思路

    本文主要介紹了淺談JVM內存溢出原因和解決思路,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 基于JavaMail的Java實現(xiàn)復雜郵件發(fā)送功能

    基于JavaMail的Java實現(xiàn)復雜郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了基于JavaMail的Java實現(xiàn)復雜郵件發(fā)送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • springboot如何自定義properties文件

    springboot如何自定義properties文件

    這篇文章主要介紹了springboot如何自定義properties文件,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • mybatis映射和實際類型不一致的問題

    mybatis映射和實際類型不一致的問題

    這篇文章主要介紹了mybatis映射和實際類型不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • jmeter下載及安裝配置教程(win10平臺為例)

    jmeter下載及安裝配置教程(win10平臺為例)

    Apache?JMeter是Apache組織開發(fā)的基于Java的壓力測試工具,Apache?jmeter?可以用于對靜態(tài)的和動態(tài)的資源(文件,Servlet,Perl腳本,java?對象,數(shù)據(jù)庫和查詢,F(xiàn)TP服務器等等)的性能進行測試,本文給大家介紹jmeter下載及安裝配置過程,感興趣的朋友一起看看吧
    2021-12-12
  • SpringBoot 動態(tài)配置郵箱發(fā)件人過程解析

    SpringBoot 動態(tài)配置郵箱發(fā)件人過程解析

    這篇文章主要介紹了SpringBoot 動態(tài)配置郵箱發(fā)件人過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 當mybatis返回值遇見內部類的問題

    當mybatis返回值遇見內部類的問題

    這篇文章主要介紹了當mybatis返回值遇見內部類的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • springboot整合SSE技術開發(fā)小結

    springboot整合SSE技術開發(fā)小結

    本文主要介紹了springboot整合SSE技術開發(fā)小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權限過濾、多字段匹配檢索及數(shù)據(jù)排序

    Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權限過濾、多字段匹配檢索及數(shù)據(jù)排序

    在Java開發(fā)中Elasticsearch(簡稱ES)是一個非常流行的搜索引擎,它提供了強大的全文搜索和分析功能,這篇文章主要給大家介紹了關于Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權限過濾、多字段匹配檢索及數(shù)據(jù)排序的相關資料,需要的朋友可以參考下
    2024-05-05
  • SpringBoot讀取配置文件常用方法解析

    SpringBoot讀取配置文件常用方法解析

    這篇文章主要介紹了SpringBoot讀取配置文件常用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論