springboot 前缀_SpringBoot2.x 给Controller的RequestMapping添加统一前缀
如何给Controller的RequestMapping添加统一前缀,比如"/api",为什么要添加统一访问前缀,其实是为了后面的接口的管理。
切记:约定与规范好过一切技术处理 !
比如:
项目A必须所有访问接口URL必须增加 /api/projectA/
项目B必须所有访问接口URL必须增加 /api/projectB/
看到url里面含有/api 表示访问后端接口服务,/projectA/ 一看就知道是项目A提供的服务接口。
总结一下 有几个方法
在配置application.yml文件中添加:
servlet:
context-path: /api #(不同SpringBoot版本会有区别,这里是采用2.x)
但是这个其实是整个项目访问前缀,如果你有静态资源也需要增加 /api 这个前缀访问。
通过nginx 和 你的网关层 添加统一的访问路径前缀,这个不多说了。
springMVC 可以实现 WebMvcConfigurer 接口中的 configurePathMatch 方法来实现添加统一路径前缀。
package com.middol.webbase.framework.config;
import com.middol.webbase.framework.annotation.ApiRestController;
import com.middol.webbase.framework.annotation.ReportRestController;
import com.middol.webbase.framework.properties.ApiPathProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
/** * 配置统一的后台接口访问路径的前缀 * @author C西 */
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Resource
private ApiPathProperties apiPathProperties;
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer
.addPathPrefix(apiPathProperties.getGlobalPrefix(),c -> c.isAnnotationPresent(ApiRestController.class))
.addPathPrefix(apiPathProperties.getReportPrefix(),c -> c.isAnnotationPresent(ReportRestController.class));
}
}
意思是 对有 @ApiRestController 注解的 controller 添加 /api前缀,对有@ReportRestController 注解的controller添加 /api/report 前缀。
@ApiRestController 和 @ReportRestController 是自定义注解继承 @RestController注解。
package com.middol.webbase.framework.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.lang.annotation.*;
/** * controller层统一使用该注解 * @author C西 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
@RequestMapping
public @interface ApiRestController {
/** * Alias for {@link RequestMapping#name}. */
@AliasFor(annotation = RequestMapping.class)
String name() default "";
/** * Alias for {@link RequestMapping#value}. */
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
/** * Alias for {@link RequestMapping#path}. */
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
}
然后 你的业务controller 层代码添加 @ApiRestController 即可,如下:
@Api(value = "DemoUser增删改查接口", tags = "【测试接口】")
@ApiRestController("demoUser")
public class DemoUserController extends BaseController{
}
其中 ApiPathProperties 是统一前缀名称管理,可以在yml中修改,我这里设置了两个 一般的CRUD接口 /api , 报表服务接口 统一为 /api/report,各自看各自服务定到底设置几个。
package com.middol.webbase.framework.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/** * 接口路径前缀配置 * @author C西 */
@Component
@ConfigurationProperties(prefix = "api.path")
@Data
public class ApiPathProperties {
String globalPrefix = "api";
String reportPrefix = "api/report";
}
application.yml文件中添加如下
## 专门针对 Controller层接口路径前缀全局配置
api:
path:
global-prefix: api
report-prefix: api/report
springboot 前缀_SpringBoot2.x 给Controller的RequestMapping添加统一前缀相关推荐
- springboot 前缀_SpringBoot + 指定包下所有控制器 + 添加统一前缀
SpringBoot + 指定包下所有控制器 + 添加统一前缀 自定义版本控制器接口定义 提供两个方法,一个方法是需要添加url前缀的控制器所属的包名称,一个是需要添加的url前缀. /** * 版本 ...
- Java:SpringBoot给Controller添加统一路由前缀
网上的文章五花八门,不写SpringBoot的版本号,导致代码拿来主义不好使了. 本文采用的版本 SpringBoot 2.7.7 Java 1.8 目录 1.默认访问路径 2.整个项目增加路由前缀 ...
- Spring Boot 接口统一前缀
需求 需求如题,想给一个 spring boot 项目的所有请求路径添加统一前缀,可以通过 context-path 来配置.但是在同时存在静态资源和 Controller 接口的项目中,如果希望静态 ...
- 如何批量添加文件名前缀?
如何批量添加文件名前缀?我们每个人在平时可能会遇到各种不同的工作,并且每项工作会产生大量的文件,电脑里的文件多了就会产生混淆,为了更好的管理这些不同项目中涉及到的文件,我们可以给相同项目的文件的名称前 ...
- Window批量添加文件名前缀
在Windows系统中,有时我们需要给多个文件添加相同的前缀,可以使用以下方式进行处理. 在需要添加前缀的文件的同级目录下,新建一个记事本 .txt 文件,然后将下面的代码复制到记事本里面,把&quo ...
- Spring MVC中@Controller和@RequestMapping注解详解
在<第一个Spring MVC应用>教程中创建了两个传统风格的控制器,它们是实现 Controller 接口的类.传统风格的控制器不仅需要在配置文件中部署映映射,而且只能编写一个处理方法, ...
- Spring中Controller和RequestMapping的详解
先看一个简单的实例: @Controller @RequestMapping("/hello") public class anyTypeController{@RequestMa ...
- springmvc常用注解之@Controller和@RequestMapping
对于各种注解而言,排第一的当然是"@Controller",表明某类是一个controller. "@RequestMapping"请求路径映射,如果标注在某个 ...
- springboot项目访问不到controller方法。
问题描述:springboot项目访问不到controller方法. [分析] 应该是springboot并没有扫描到controller. [查看日志] 记录此时的日志输出 /Library/Jav ...
最新文章
- 36 岁开发者应聘被拒,这 3 位 50 岁程序员的生存秘籍送给你!
- goaccess在定时任务中不执行的问题
- Day03——Python函数
- stm32 JTag 错误
- 在eclipse中输入.后提示解决
- 在将计算机技术应用于会计工作的初期,所开发的会计核算软件主要用于,电算化考前试七.doc...
- react 遍历对象_探索:跟随《Build your own React》实现一个简易React
- 计算机中国象棋书籍,[建议]中国的象棋永远不能被没有“思维”的电脑所代替(就目前的电脑象棋软件...
- dazhilu网站代码【完整篇】
- SQL数据库高级查询命令(2)
- 基于Jenkins + Tomcat 的安卓客户端可持续化构建及发布下载(loltube.cn)
- pytorch_pix2pix之argparse
- layui结合mybatis的pagehelper插件的分页通用的方法
- python安装汉化插件及翻译插件
- matlab绘制符号函数的ezplot函数
- 视频文件加密的方法浅析
- 5.Python格式化输出
- java rectangle获取xy_Day06 Java基础学习笔记
- Python结合MySQL数据库编写简单信息管理系统
- GE IC697CPX935 CPU模块PDF帅