SpringBoot2.x实现给Controller的RequestMapping添加统一前缀

 更新时间:2022年02月18日 08:38:42   作者:小时候的阳光  
这篇文章主要介绍了SpringBoot2.x实现给Controller的RequestMapping添加统一前缀,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

给Controller的RequestMapping添加统一前缀

如何给Controller的RequestMapping添加统一前缀,比如"/api",为什么要添加统一访问前缀,其实是为了后面的接口的管理。

切记:约定与规范好过一切技术处理 !

比如:

  • 项目A必须所有访问接口URL必须增加 /api/projectA/
  • 项目B必须所有访问接口URL必须增加 /api/projectB/
  • 看到url里面含有/api 表示访问后端接口服务,/projectA/ 一看就知道是项目A提供的服务接口。

总结一下 有几个方法

1、在配置application.yml文件中添加:

  servlet:
    context-path: /api #(不同SpringBoot版本会有区别,这里是采用2.x)

但是这个其实是整个项目访问前缀,如果你有静态资源也需要增加 /api 这个前缀访问。

2、通过nginx 和 你的网关层 添加统一的访问路径前缀,这个不多说了。

3、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项目添加全局前缀

spring的配置

spring.application.name: article (spring boot下无效)

spring boot的配置

(springboot你自己设置的前缀名称)

properties文件

server.servlet.context-path: /springboot

yml文件

server:
  servlet:
    context-path: /springboot

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决 java.lang.NoSuchMethodError的错误

    解决 java.lang.NoSuchMethodError的错误

    这篇文章主要介绍了解决 java.lang.NoSuchMethodError的错误的相关资料,需要的朋友可以参考下
    2017-06-06
  • 详解JUC并发编程之锁

    详解JUC并发编程之锁

    这篇文章主要为大家介绍了JUC并发编程之锁,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • IntelliJ IDEA下SpringBoot如何指定某一个配置文件启动项目

    IntelliJ IDEA下SpringBoot如何指定某一个配置文件启动项目

    这篇文章主要介绍了IntelliJ IDEA下SpringBoot如何指定某一个配置文件启动项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Spring中Bean的生命周期实例讲解

    Spring中Bean的生命周期实例讲解

    这篇文章主要介绍了Spring中Bean的生命周期讲解,而Spring中的一个Bean从开始到结束经历很多过程,但总体可以分为六个阶段Bean定义、实例化、属性赋值、初始化、生存期、销毁,需要的朋友可以参考下
    2023-08-08
  • SpringCloud Gateway动态转发后端服务实现过程讲解

    SpringCloud Gateway动态转发后端服务实现过程讲解

    这篇文章主要介绍了SpringCloud Gateway动态转发后端服务实现过程,简单的路由转发可以通过SpringCloudGateway的配置文件实现,在一些业务场景种,会需要动态替换路由配置中的后端服务地址,单纯靠配置文件无法满足这种需求
    2023-03-03
  • Spring框架学习之AOP详解

    Spring框架学习之AOP详解

    这篇文章主要介绍了Spring框架学习之AOP详解,文中有非常详细的代码示例,对正在学习Spring框架的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-05-05
  • 详解Spring-bean的循环依赖以及解决方式

    详解Spring-bean的循环依赖以及解决方式

    这篇文章主要介绍了详解Spring-bean的循环依赖以及解决方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Eclipse可视化插件WindowBuilder的安装方法

    Eclipse可视化插件WindowBuilder的安装方法

    这篇文章主要介绍了Eclipse可视化插件WindowBuilder的安装方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 关于JavaEE内部类的部分注意事项

    关于JavaEE内部类的部分注意事项

    这篇文章主要介绍了关于JavaEE内部类的部分注意事项,将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,这是一种封装思想,那么使用内部类的时候要注意些什么呢,让我们一起来看看吧
    2023-03-03
  • Spring Boot环境下Mybatis Plus的快速应用操作

    Spring Boot环境下Mybatis Plus的快速应用操作

    这篇文章主要介绍了Spring Boot环境下Mybatis Plus的快速应用操作,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论