千家信息网

SpringBoot如何根据目录结构自动配置Url前缀

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要为大家展示了"SpringBoot如何根据目录结构自动配置Url前缀",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何根据
千家信息网最后更新 2025年01月21日SpringBoot如何根据目录结构自动配置Url前缀

这篇文章主要为大家展示了"SpringBoot如何根据目录结构自动配置Url前缀",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何根据目录结构自动配置Url前缀"这篇文章吧。

在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能够响应前端的请求都需要我们主动去注册到应用程序上。而Spring不需要我们自己去注册,由Spring通过扫描注解的方式去主动发现

自定义RequestMappingInfo

Spring中的RequestMappingHandlerMapping专门来负责处理标注了@RequestMapping的控制器。创建一个类继承并覆盖其中的方法,从而实现对默认机制的修改。

覆盖其中的getMappingForMethod方法,这个方法的返回值RequestMappingInfo就包含了请求的Url,修改RequestMappingInfo中的Url从而修改路由中的Url。

package com.lin.missyou.hack;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;public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {    @Value("${missyou.api-package}")    private String apiPackagePath ;          //从配置文件中获取根包的路径    @Override    protected RequestMappingInfo getMappingForMethod(Method method, Class handlerType) {        RequestMappingInfo requestMappingInfo = super.getMappingForMethod(method, handlerType);        if(null != requestMappingInfo){                //获取url前缀            String prefix = getPrefix(handlerType);                      //根据url前缀生成RequestMappingInfo并与原有的RequestMappingInfo合并            RequestMappingInfo mappingInfo = RequestMappingInfo.paths(prefix).build().combine(requestMappingInfo);                       return mappingInfo;        }        return requestMappingInfo;    }    private String getPrefix(Class handlerType){        String packageName = handlerType.getPackage().getName(); //获取控制器所在包路径        String dotPath = packageName.replaceAll(this.apiPackagePath,"");       //将包路径中多于的部分截取掉        return dotPath.replace(".","/");               //将包路径中的.替换成/    }}

通过接口的形式发现类

创建一个配置类AutoPrefixConfiguration将AutoPrefixUrlMapping加入到容器。配置类AutoPrefixConfiguration实现接口WebMvcRegistrations并覆盖其中的getRequestMappingHandlerMapping方法

package com.lin.missyou.core.config;import com.lin.missyou.hack.AutoPrefixUrlMapping;import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;import org.springframework.stereotype.Component;import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;@Componentpublic class AutoPrefixConfiguration implements WebMvcRegistrations {    @Override    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {        return new AutoPrefixUrlMapping();    }}

在配置文件中指定根包

missyou.api-package = com.lin.missyou.api

SprinBoot的 发现机制 有两种。一种是在控制器上标注特定注解,例如上一篇博文 SpringBoot全局异常处理中在GlobalExceptionAdvice 上标注@ControllerAdvice。另外一种是实现特定接口并覆盖其中的特定方法,例如上面的AutoPrefixConfiguration。

测试一下

访问结果,访问路径/v1/banner/test可以访问到该控制器

将访问路径改为/banner/test就访问不到了

将BannerController移动到sample文件夹下访问路径/v1/sample/banner/test可以访问到该控制器

这个方法存在一些争议。一方面认为根据目录结构自动生成url虽然比较简单,少写了一些代码,但是无法通过控制器上标注的@RequestMapping中的参数直接看出url,代码的可读性不是太好。

另一方面认为,这个方法大大的简化了我们代码的编写,同时更加易于维护,控制器随意调整所在目录都不需要去修改代码。

以上是"SpringBoot如何根据目录结构自动配置Url前缀"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

配置 控制器 方法 控制 路径 前缀 目录 结构 代码 上标 内容 接口 文件 篇文章 主动 所在 机制 注解 处理 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 mysql自带数据库作用 网络安全word文档 烟台数据库工资 网络技术应用平台 远程数据库的作用 网络服务器租赁从哪一年开始 数据库安全性包括哪几个 云南网络技术服务推广 怎样可以让手机关不了数据库 00后网络安全吗 武汉欧斯通互联网科技有限公司 政府软件开发哪家质量好 山东服务器维修价格 服务器 远程管理 驾御互联网科技上海有限公司 珠海微信软件开发定制 太和县网络技术及信息安全工程师 吉林市网络安全高峰论坛 万方中外标准文献数据库 鹏程网络技术有限公司 阿里云轻量级应用服务器优惠券 北京综合软件开发价格多少 服务器如何打开安全组 象山直销软件开发服务 数据库安全性包括哪几个 计算机网络技术慕课作业答案 数据库二次检索的逻辑含义 论坛网站需要数据库 关于儿童网络安全的事例 怎么搭建两个服务器运行一个网站
0