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

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

  • 自定义RequestMappingInfo

    public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
    
        // 基础包路径
        @Value("${api.base.package.path}")
        private String apiBasePackagePath;
    
        @Override
        protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
            RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);
            if(mappingInfo != null) {
                String prefixPath = this.getPrefixPath(handlerType);
                // 在原来的requestMapping上加上前缀
                return RequestMappingInfo.paths(prefixPath).build().combine(mappingInfo);
            }
            return null;
        }
    
        // 获取路由前缀,去掉基础包路径后的目录
        private String getPrefixPath(Class<?> handlerType) {
            String packagePath = handlerType.getPackage().getName();
            return packagePath
                    .replaceAll(apiBasePackagePath, "")
                    .replaceAll("\\.", "/");
        }
    }
    
  • 将自定义的RequestMappingInfo注册到Spring容器中

    public class AutoPrefixUrlRegister implements WebMvcRegistrations {
    
        @Override
        public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
            return new AutoPrefixUrlMapping();
        }
    }
    
  • 访问api

    package com.shuguangtj.v1;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping(value = "/hello")
    public class HelloWorldController {
    
        @GetMapping(value = "/say")
        public String say() {
    
            return "hello, world";
        }
    }
    

    在配置文件中设置的基础包路径api.base.package.path = com.shuguangtj,所以say()方法的访问路径就变成了http://localhost:8080/v1/hello/say,如果把HelloWorld放在了com.shuguangtj.v2包下,访问路径自动就变成了http://localhost:8080/v2/hello/say

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值