SpringBoot怎么根据目录结构自动生成路由前缀

发布时间:2021-08-12 09:26:55 作者:chen
来源:亿速云 阅读:246

本篇内容主要讲解“SpringBoot怎么根据目录结构自动生成路由前缀”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么根据目录结构自动生成路由前缀”吧!

目录

前言

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

SpringBoot怎么根据目录结构自动生成路由前缀

具体实现

配置文件指定基础包

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怎么根据目录结构自动生成路由前缀

访问结果

SpringBoot怎么根据目录结构自动生成路由前缀

到此,相信大家对“SpringBoot怎么根据目录结构自动生成路由前缀”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. springboot使用rabbitmq fanout路由模式
  2. ASP.NET Core MVC 配置全局路由前缀

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot

上一篇:MySQL数据库基础知识总结

下一篇:django之如何使用celery把耗时程序放到celery里面执行

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》