前言
本文介紹如何根據目錄結構給requestmapping添加路由前綴(覆蓋requestmappinghandlermapping中的getmappingformethod方法,修改其中的url),如下圖的實際訪問路徑為:/v1/test/test。
具體實現
配置文件指定基礎包
application.properties
1
|
api- package = com.coisini.springbootlearn.controller |
自動補全路由前綴處理類
autoprefixurlmapping.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
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; import java.util.objects; /** * @description 自動補全路由前綴處理類 * requestmappinghandlermapping 負責處理標注了@requestmapping的控制器 * @author coisini * @date aug 10, 2021 * @version 1.0 */ public class autoprefixurlmapping extends requestmappinghandlermapping { /** * 讀取基礎包配置 */ @value ( "${api-package}" ) private string bathapipackagepath; /** * 重寫方法路由獲取 * @param method * @param handlertype * @return */ @override protected requestmappinginfo getmappingformethod(method method, class <?> handlertype) { requestmappinginfo mappinginfo = super .getmappingformethod(method, handlertype); if (objects.nonnull(mappinginfo)) { string prefix = this .getprefix(handlertype); /** * requestmappinginfo.paths(prefix).build() 根據前綴生成mappinginfo * combine(mappinginfo) 拼接原來的mappinginfo */ return requestmappinginfo.paths(prefix).build().combine(mappinginfo); } return mappinginfo; } /** * 獲取方法路由前綴 * @param handletype * @return */ private string getprefix( class <?> handletype) { string packagename = handletype.getpackage().getname(); string dotpath = packagename.replace( this .bathapipackagepath, "" ).replace( "." , "/" ); return dotpath; } } |
自動補全路由前綴配置類
autoprefixconfiguration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/** * @description 自動補全路由前綴配置類 * 通過接口的形式主動發現 * @author coisini * @date aug 10, 2021 * @version 1.0 */ @component public class autoprefixconfiguration implements webmvcregistrations { @override public requestmappinghandlermapping getrequestmappinghandlermapping() { return new autoprefixurlmapping(); } } |
測試類
1
2
3
4
5
6
7
8
9
10
|
@restcontroller @requestmapping ( "/test" ) public class testcontroller { @getmapping (value = "/test" ) public string test(){ return "hello" ; } } |
測試
目錄結構如下
訪問結果
目錄結構變更
訪問結果
到此這篇關于springboot - 根據目錄結構自動生成路由前綴的文章就介紹到這了,更多相關springboot目錄結構路由前綴內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_41182727/article/details/119581199