好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringBoot根据目录结构自动生成路由前缀的实现代码

前言

本文介绍如何根据目录结构给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()测试数据bine(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

查看更多关于SpringBoot根据目录结构自动生成路由前缀的实现代码的详细内容...

  阅读:14次