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

 更新时间:2021年08月11日 15:28:45   作者:Maggieq8324  
本文介绍如何根据目录结构给RequestMapping添加路由前缀,具体实现方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

前言

本文介绍如何根据目录结构给RequestMapping添加路由前缀(覆盖RequestMappingHandlerMapping中的getMappingForMethod方法,修改其中的Url),如下图的实际访问路径为:/v1/test/test。

在这里插入图片描述

具体实现

配置文件指定基础包

application.properties

api-package = com.coisini.springbootlearn.controller

自动补全路由前缀处理类

AutoPrefixUrlMapping.java

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

/**
 * @Description 自动补全路由前缀配置类
 * 通过接口的形式主动发现
 * @author coisini
 * @date Aug 10, 2021
 * @Version 1.0
 */
@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return new AutoPrefixUrlMapping();
    }
}

测试类

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping(value = "/test")
    public String test(){
        return "hello";
    }

}

测试

目录结构如下

在这里插入图片描述

访问结果

在这里插入图片描述

目录结构变更

在这里插入图片描述

访问结果

在这里插入图片描述

到此这篇关于SpringBoot - 根据目录结构自动生成路由前缀的文章就介绍到这了,更多相关SpringBoot目录结构路由前缀内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目中获取IP地址的实现示例

    SpringBoot项目中获取IP地址的实现示例

    OkHttp是一个由Square开发的高效、现代的HTTP客户端库,本文主要介绍了SpringBoot项目中获取IP地址的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 关于Spring中@Value注解使用和源码分析

    关于Spring中@Value注解使用和源码分析

    通过深入分析@Value注解的使用和源码,本文详细解释了Spring如何解析@Value注解并为属性赋值,首先,Spring会解析并收集所有被@Value注解修饰的属性,这一过程依赖于AutowiredAnnotationBeanPostProcessor类
    2024-11-11
  • JAVA JSP页面技术之EL表达式整理归纳总结

    JAVA JSP页面技术之EL表达式整理归纳总结

    这篇文章主要介绍了java中JSP页面技术之EL表达式概念作用以及语法等的使用,需要的朋友可以参考
    2017-04-04
  • 详解RocketMQ中的消费者启动与消费流程分析

    详解RocketMQ中的消费者启动与消费流程分析

    本文主要介绍了RocketMQ的消费者启动流程,结合官方源码和示例,一步步讲述消费者在启动和消息消费中的的工作原理及内容,并结合平时业务工作中,对我们所熟悉的顺序、push/pull模式等进行详细分析,以及对于消息消费失败和重投带来问题去进行分析,需要的朋友可以参考下
    2022-07-07
  • Java中将异步调用转为同步的五种实现方法

    Java中将异步调用转为同步的五种实现方法

    本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownLatch和CyclicBarrier,每种方法都有其适用场景和核心机制,可以根据具体需求选择合适的方法,需要的朋友可以参考下
    2025-02-02
  • redis统计APP在线人数的实例

    redis统计APP在线人数的实例

    这篇文章主要介绍了redis统计APP在线人数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 计算机编程语言发展史

    计算机编程语言发展史

    这篇文章主要介绍了Java计算机编程语言发展史,编程语言 可以简单的理解为一种计算机和人都能识别的语言。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动,下面详细内容,需要的小伙伴可以参考一下
    2022-01-01
  • Spring注解驱动之@EventListener注解使用方式

    Spring注解驱动之@EventListener注解使用方式

    这篇文章主要介绍了Spring注解驱动之@EventListener注解使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • SpringMVC中使用@PathVariable绑定路由中的数组的方法

    SpringMVC中使用@PathVariable绑定路由中的数组的方法

    这篇文章主要介绍了SpringMVC中使用@PathVariable绑定路由中的数组的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Jvisualvm监控远程SpringBoot项目的过程详解

    Jvisualvm监控远程SpringBoot项目的过程详解

    这篇文章主要介绍了Jvisualvm监控远程SpringBoot项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论