springboot 前缀_SpringBoot + 指定包下所有控制器 + 添加统一前缀
SpringBoot + 指定包下所有控制器 + 添加统一前缀
自定义版本控制器接口定义
提供两个方法,一个方法是需要添加url前缀的控制器所属的包名称,一个是需要添加的url前缀。
/**
* 版本控制器
*
* @author Hanqi
* @since 2019/3/13 16:11
*/
public interface VersionHandler {
/**
* 需要处理的控制器所处的包名
*/
String getPackageName();
/**
* 需要添加的前缀
*/
String getPrefix();
}
简单的版本控制器实现
import org.springframework.stereotype.Component;
/**
* 版本控制实例
* @author Hanqi
* @since 2019/3/13 16:11
*/
@Component
public class TwoVersionHandler implements VersionHandler {
@Override
public String getPackageName() {
return "com.uustore.uustoreapi.controller";
}
@Override
public String getPrefix() {
return "v2";
}
}
实现添加url前缀核心方法的请求映射处理器
import org.springframework.util.CollectionUtils;
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.HashSet;
import java.util.Set;
public class VersionControlRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
protected Set versionHandlers;
protected boolean hasVersionHandler = false;
@Override
public void afterPropertiesSet() {
// 初始化版本控制器类型集合
initVersionHandlers();
super.afterPropertiesSet();
}
@Override
protected void initHandlerMethods() {
super.initHandlerMethods();
}
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class> handlerType) {
RequestMappingInfo info = super.getMappingForMethod(method, handlerType);
if (info != null) {
final String packageName = handlerType.getPackage().getName();
for (VersionHandler versionHandler : versionHandlers) {
if (packageName.startsWith(versionHandler.getPackageName())) {
RequestMappingInfo versionInfo = buildRequestMappingInfo(versionHandler.getPrefix());
info = versionInfo.combine(info);
return info;
}
}
}
return info;
}
protected void initVersionHandlers() {
versionHandlers = new HashSet<>(obtainApplicationContext().getBeansOfType(VersionHandler.class).values());
hasVersionHandler = !CollectionUtils.isEmpty(versionHandlers);
}
protected RequestMappingInfo buildRequestMappingInfo(String path) {
return RequestMappingInfo.paths(path).build();
}
}
注册使用自定义的请求映射处理器
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
/**
* 配置使用自定义版本url处理器
*
* @author Hanqi
* @since 2019/3/13 16:11
*/
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class VersionControlWebMvcConfiguration implements WebMvcRegistrations {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new VersionControlRequestMappingHandlerMapping();
}
}
springboot 前缀_SpringBoot + 指定包下所有控制器 + 添加统一前缀相关推荐
- springboot 前缀_SpringBoot2.x 给Controller的RequestMapping添加统一前缀
如何给Controller的RequestMapping添加统一前缀,比如"/api",为什么要添加统一访问前缀,其实是为了后面的接口的管理. 切记:约定与规范好过一切技术处理 ! ...
- Spring Boot 自动加载指定包下的拦截器
Spring Boot 在我们需要对程序添加拦截器需要使用 WebMvcConfigurerAdapter 中的 addInterceptors方法去注册拦截器,这样我们如果在程序里面有多个拦截或者我 ...
- Java:SpringBoot给Controller添加统一路由前缀
网上的文章五花八门,不写SpringBoot的版本号,导致代码拿来主义不好使了. 本文采用的版本 SpringBoot 2.7.7 Java 1.8 目录 1.默认访问路径 2.整个项目增加路由前缀 ...
- 004 关于Java如何扫描指定package下所有的类
q前言: 在工作中看到这个知识点,就顺便参考了百度的一些资料,整理一下,希望以后用的到. 一:理论部分 1.使用场景 写一个MVC框架,需要从包中扫描出组件并注册到容器中,而JDK没有提供现成的从方法 ...
- java 扫描jar包_java 扫描指定包(包括jar包)
/*未经本人同意,禁止转载. 做工程时,有时候需要扫描指定包,或者指定jar包,甚至扫描指定包下指定类,本文章详细讲解如何扫描,以及智能扫描,小编讲的很详细了仔细看. 以下讲解, 包扫描和jar包扫描 ...
- 如何批量添加文件名前缀?
如何批量添加文件名前缀?我们每个人在平时可能会遇到各种不同的工作,并且每项工作会产生大量的文件,电脑里的文件多了就会产生混淆,为了更好的管理这些不同项目中涉及到的文件,我们可以给相同项目的文件的名称前 ...
- Window批量添加文件名前缀
在Windows系统中,有时我们需要给多个文件添加相同的前缀,可以使用以下方式进行处理. 在需要添加前缀的文件的同级目录下,新建一个记事本 .txt 文件,然后将下面的代码复制到记事本里面,把&quo ...
- Spring Boot 接口统一前缀
需求 需求如题,想给一个 spring boot 项目的所有请求路径添加统一前缀,可以通过 context-path 来配置.但是在同时存在静态资源和 Controller 接口的项目中,如果希望静态 ...
- R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录
最新文章
- 完整的虚幻引擎超级课程:从初学者到专家
- [转贴]电阻电容的封装形式如何选择
- ajax跨域问题解决方案
- P4550 收集邮票-洛谷luogu
- Linux下svn新建用户,Linux下建立svn工程
- WPF Grid添加边框的两种方法
- 牛客练习赛 67——ST表
- 在Mysql中显示所有用户的操作教程(Linux环境下)
- 【HDOJ】4602 Partition
- 小米(MIUI)系统组招聘职位
- 作为开发者发布小程序_如何建立个人品牌作为新开发者
- VC2005 C++入门记
- python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!
- Sleutel:密码治理器
- python怎么读取中文文件-python: py2下 中文 的 文件读写 及 打印
- Google及其云智慧
- 21计算机考研上岸经验分享(一战成硕,普通双非逆袭顶级211)
- vscode java
- 1.2 安装 docker 容器并配置镜像加速器
- ​EMNLP 2022 | 预训练语言模型的时空效率优化
热门文章
- 紫禁城里“冷宫”在哪儿? 故宫的六大宫廷之迷
- Vczh Library++3.0 开源啦!
- CSS:实现一个斑马线效果 (条纹背景)
- 《Android Studio开发实战 从零基础到App上线(第3版)》出版后记
- TensorFlow-Slim基础使用
- HTTP协议-简单学习
- 网易新闻IOS客户端
- macOS Monterey 12.6.7 (21G651) 正式版发布,ISO、IPSW、PKG 下载
- 万兆局域网方案_组建万兆局域网对网络设备的要求 (原创)
- {YiGeZiWoJianJie}个人简历(还没写完呢)