当前位置 博文首页 > li5672的专栏:java api设置统一前缀

    li5672的专栏:java api设置统一前缀

    作者:[db:作者] 时间:2021-08-30 16:01

    github

    • AutoPrefixUrlMapping.java
    public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
    
        @Value("${api-package}")
        private String apiPackagePath;
    
        @Override
        protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
            RequestMappingInfo mappingInfo =  super.getMappingForMethod(method, handlerType);
            if(mappingInfo != null){
                String prefix = this.getPrefix(handlerType);
                return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);
            }
            return mappingInfo;
        }
    
        private String getPrefix(Class<?> handlerType){
            String packageName = handlerType.getPackage().getName();
            String dotPath = packageName.replaceAll(this.apiPackagePath,"");
            return dotPath.replace(".", "/");
        }
    }
    
    • AutoPrefixConfiguration.java
    
    @Configuration
    public class AutoPrefixConfiguration implements WebMvcRegistrations {
    
        @Override
        public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
            return new AutoPrefixUrlMapping();
        }
    }
    
    • application.yml
      api-package: com.example.demo
    
    • DemoController
    @RestController
    @RequestMapping("/demo")
    public class DemoController {
    
        @GetMapping("/a")
        public ResponseEntity getUser() {
            return ResponseEntity.status(HttpStatus.OK).body("22");
        }
    
    
    • 目录结构
      在这里插入图片描述

    请求地址:http://localhost:8080/api/demo/a

    cs