返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot如何根据目录结构生成API接口前缀
  • 310
分享到

SpringBoot如何根据目录结构生成API接口前缀

2024-04-02 19:04:59 310人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、根据目录结构生成接口前缀二、自定义RequestMappingInfo三、测试一、根据目录结构生成接口前缀 在写api的接口时,通常有很多版本的迭代,比如:v1、v2。 如图

一、根据目录结构生成接口前缀

在写api的接口时,通常有很多版本的迭代,比如:v1、v2。

如图所示,建立的包结构。

列举v1版本,每新建一个controller都要写上@RequestMapping("/v1/****")的路由的前缀,如果v1下面还有几个包结构,这样路由就要写的很麻烦。

我们可以通过当前api下的目录结构自动加上请求前缀。

二、自定义RequestMappingInfo

spring里有一个专门处理拥有@RequestMapping()注解的控制器的类(RequestMappingHandlerMapping),因为我们要修改控制器的路由。

  • 写一个类继承RequestMappingHandlerMapping,重写类的getMappingFORMethod方法。这个方法就是定义和生成路由。
  • 调用基类的getMappingForMethod方法就能拿到RequestMappingInfo 的路由信息,先接受信息,修改完了,再返回。
  • 这里要进行路由前缀的修改,封装一个方法getPrefix(),而handlerType这个参数就是获取控制器的信息。
  • 获取控制器的目录结构,进行替换,保留api目录之后的路径。
  • 这里的apiPackagePath,就是com.api。指定api是所有api的根目录。
  • 获取到的请求路径是.,替换为/。
  • 得到了prefix前缀,修改MappingInfo。通过RequestMappingInfo的静态方法合并url。

public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {
    @Value("${api-package}")
    private String apiPackagePath;
    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
        RequestMappingInfo mappingForMethod = super.getMappingForMethod(method, handlerType);
        String prefix = getPrefix(handlerType);
        if (mappingForMethod!=null){
           return RequestMappingInfo.paths(prefix).build().combine(mappingForMethod);
        }
        return mappingForMethod;
    }
    private String getPrefix(Class<?> handlerType){
        String packageName = handlerType.getPackage().getName();
        String doPath = packageName.replaceAll(this.apiPackagePath, "");
        return doPath.replace('.', '/');
    }
}
  • 配置类的方法将AutoPrefixUrlMapping类注入ioc容器中。
  • 新建一个配置类继承WEBmvcReGIStrations接口。实现getRequestMappingHandlerMapping方法,直接实例化AutoPrefixUrlMapping。
  • 将配置类加入容器中@Component

@Component
public class AutoPrefixConfiguration implements WebMvcRegistrations {
    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
        return new AutoPrefixUrlMapping();
    }
}

三、测试

在v1包下新建一个controller


@RestController()
@RequestMapping("/banner")
public class BannerController {
    @GetMapping("/test")
    public String test() {
        return "你好 hello";
    }
}

启动主程序,测试接口Http://localhost:8080/v1/banner/test,

自动合并了路由,v1是自动拼接的。

将controller移动到v2的sample包下,controller的请求路径没有修改。

这是重新服务再访问http://localhost:8080/v2/sample/banner/test。

成功访问,不管目录多么复杂都实现了根据目录结构生成路由前缀,不用修改控制器的requestMapping。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringBoot如何根据目录结构生成API接口前缀

本文链接: https://lsjlt.com/news/139638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot如何根据目录结构生成API接口前缀
    目录一、根据目录结构生成接口前缀二、自定义RequestMappingInfo三、测试一、根据目录结构生成接口前缀 在写api的接口时,通常有很多版本的迭代,比如:v1、v2。 如图...
    99+
    2024-04-02
  • SpringBoot如何根据目录结构自动配置Url前缀
    这篇文章主要为大家展示了“SpringBoot如何根据目录结构自动配置Url前缀”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何根据目录结构自动配置Url前缀”这篇文章吧。...
    99+
    2023-06-25
  • SpringBoot根据目录结构自动生成路由前缀的实现代码
    目录前言具体实现配置文件指定基础包自动补全路由前缀处理类自动补全路由前缀配置类测试类测试前言 本文介绍如何根据目录结构给RequestMapping添加路由前缀(覆盖RequestM...
    99+
    2024-04-02
  • SpringBoot根据目录结构自动配置Url前缀方式
    目录自定义RequestMappingInfo通过接口的形式发现类在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能够响应前端的请求都...
    99+
    2024-04-02
  • SpringBoot如何根据目录路径生成接口的url路径
    目录根据目录路径生成接口的url路径配置文件application.proprties如下springboot接口请求界面路径返404接口没被扫描到配置或代码写法问题最后根据目录路径...
    99+
    2024-04-02
  • SpringBoot怎么根据目录路径生成接口的url路径
    这篇文章主要讲解了“SpringBoot怎么根据目录路径生成接口的url路径”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么根据目录路径生成接口的url路径”吧!根据目...
    99+
    2023-06-25
  • 如何实现在当前目录生成结构树的批处理dir.bat
    这篇文章主要介绍如何实现在当前目录生成结构树的批处理dir.bat,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!dir.bat代码如下:@rem 此BAT文件名一定不能是"tree.bat&quo...
    99+
    2023-06-09
  • 一文详解如何在前端中动态生成API接口
    本篇文章给大家带来了关于前端的相关知识,其中主要介绍了怎么在前端中动态的生成API接口 ,下面一起来看一下,希望对大家有帮助。在ts横行的时代,接口请求和返回参数定义类型成了繁琐的一件事情,在这样的情况下,我们可以通过node服务,来进行自...
    99+
    2023-05-14
    node API
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作