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

目录
  • 给Controller的RequestMapping添加统一前缀
    • 总结一下 有几个方法
  • springboot项目添加全局前缀
    • spring的配置
    • spring boot的配置

给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

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

(0)

相关推荐

  • springboot如何为web层添加统一请求前缀

    目录 如何为web层添加统一请求前缀 配置文件方式 实现WebMvcConfigurer接口 spring web访问页面出现多余前缀和后缀情况 页面中出现hello.jsp 解决方法 如何为web层添加统一请求前缀 配置文件方式 application.properties全局配置文件配置: server.servlet.context-path=/api 实现WebMvcConfigurer接口 重写configurePathMatch()方法,代码: @Configuration publ

  • 在SpringBoot项目中实现给所有请求加固定前缀

    目录 给所有请求加个固定前缀 知识小锦囊 配置文件读取(固定前缀) 1.配置文件所有固定前缀的都可以使用 2.SpringBoot实体类 3.使用方式 给所有请求加个固定前缀 在开发中,可能会遇到需要配置项目前缀的问题,虽然我们可以在Controller控制器方法中给所有请求加前缀,但是不仅比较麻烦,而且在某种环境下是没什么用处,形同虚设 接下来,教你在配置文章中只需短短一小行代码配置即可生效 知识小锦囊 在yml配置文件中加入配置: server.servlet.context-path: /

  • SpringBoot使用前缀树过滤敏感词的方法实例

    目录 一.前缀树 二.敏感词过滤器 总结 一.前缀树 一般设计网站的时候,会有问题发布或者是内容发布的功能,这些功能的有一个很重要的点在于如何实现敏感词过滤,要不然可能会有不良信息的发布,或者发布的内容中有夹杂可能会有恶意功能的代码片段,敏感词过滤的基本的算法是前缀树算法,前缀树也就是字典树,通过前缀树匹配可以加快敏感词匹配的速度. 前缀树又称为Trie.字典树.查找树.主要特点是:查找效率高,但内存消耗大:主要应用于字符串检索.词频统计.字符串排序等. 到底什么是前缀树?前缀树的功能是如何实现

  • springboot 配置文件配置项前缀为0的数字特殊处理方式

    目录 配置文件配置项前缀为0的数字处理 问题 解决方法 源码类分析 yml配置文件中写以数字0开头的值 记一次springboot踩的坑 配置文件配置项前缀为0的数字处理 问题 spring boot yml配置文件中 ,配置前缀0的数字时,会被特殊处理,如下图配置04100 会当做八进制数处理成2112 解决方法 配置项两边加引号,这时会当做字符串处理 源码类分析 ConstructYamlInt 分析源码可知: 1.以0b开头的数字,会被当做二进制数处理 2.以0x开头的数字,会被当做十六进

  • springboot controller 增加指定前缀的两种实现方法

    目录 controller 增加指定前缀 1.增加配置 2.过滤拦截 springboot服务端口.项目前缀的配置 在application.properties中配置 controller 增加指定前缀 1.增加配置 server.servlet.context-path: /api 这种是最常见的,加上这个配置后,所有的url,必须带上/api的前缀,才能访问到该url 2.过滤拦截 这种是加上/api也可以访问,不加/api也可以访问,适合项目重构修改的适合用 import org.apa

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

    目录 给Controller的RequestMapping添加统一前缀 总结一下 有几个方法 springboot项目添加全局前缀 spring的配置 spring boot的配置 给Controller的RequestMapping添加统一前缀 如何给Controller的RequestMapping添加统一前缀,比如"/api",为什么要添加统一访问前缀,其实是为了后面的接口的管理. 切记:约定与规范好过一切技术处理 ! 比如: 项目A必须所有访问接口URL必须增加 /api/pr

  • Spring MVC中@Controller和@RequestMapping注解使用

    目录 @Controller和@RequestMapping注解使用 RequestMapping注解类型 通过@RequestParam接收请求参数 SpringMVC应用@Autowired和@Service进行依赖注入 通过org.springframework.web.bind.annotation.ModelAttribute 拦截器的配置 @RequestMapping和Controller方法返回值 @RequestMapping Controller方法返回值 @Controll

  • 聊聊Controller中RequestMapping的作用

    目录 Controller@RequestMapping作用 1.value,method 2.consumes,produces 3.params,headers Controller配置总结及RequestMapping说明 控制器Controller RequestMapping说明 Controller @RequestMapping作用 @RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. @

  • SpringBoot多controller添加URL前缀的实现方法

    目录 前言 一.配置文件内添加前缀配置 二.配置映射的实体 三.自定义注解 四.自定义PathMatch添加前缀 五.测试 前言 在某些情况下,服务的controller中前缀是一致的,例如所有URL的前缀都为/context-path/api/v1,需要为某些URL添加统一的前缀. 能想到的处理办法为修改服务的context-path,在context-path中添加api/v1,这样修改全局的前缀能够解决上面的问题,但存在弊端,如果URL存在多个前缀,例如有些URL需要前缀为api/v2,就

  • SpringBoot全局Controller返回值格式统一

    目录 一.返回值格式统一 1.返回值介绍 2.基础类功能 3.基础实现 二.附录说明 一.返回值格式统一 1.返回值介绍 在使用controller对外提供服务的时候,很多时候都需要统一返回值格式,例如 { "status": true, "message": null, "code": "200", "data": { "name": "json", "d

  • linux中批量添加文件前缀的操作方法

    需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件"xxx.txt"变成"gt_xxx.txt": 网上搜来的脚本如下: for i in `ls`; do mv -f $i 'echo "gt_"$i`; done 1.首先, linux命令行切换到你需要修改文件名的目录之下: cd 目的目录 2.在该目录下新建sh文件: touch xxx.sh 3.打开xxx.sh文件: vim xxx.sh 3

  • ASP.NET Core如何添加统一模型验证处理机制详解

    一.前言 模型验证自ASP.NET MVC便有提供,我们可以在Model(DTO)的属性上加上数据注解(Data Annotations)特性,在进入Action之前便会根据数据注解,来验证输入的数据是否合法,下面介绍以下如何统一处理验证并返回错误信息.话不多说了,来一起看看详细的介绍吧. 二.Action过滤器实现统一验证 我们在判断验证状态时一般会在Action里判断ModelState.IsValid是否为true. public IActionResult Create([FromBod

  • SpringBoot根据目录结构自动生成路由前缀的实现代码

    目录 前言 具体实现 配置文件指定基础包 自动补全路由前缀处理类 自动补全路由前缀配置类 测试类 测试 前言 本文介绍如何根据目录结构给RequestMapping添加路由前缀(覆盖RequestMappingHandlerMapping中的getMappingForMethod方法,修改其中的Url),如下图的实际访问路径为:/v1/test/test. 具体实现 配置文件指定基础包 application.properties api-package = com.coisini.spring

  • ASP.NET Core MVC 配置全局路由前缀

    ASP.NET Core MVC 配置全局路由前缀 前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应用背景 不知道大家在做 Web Api 应用程序的时候,有没有遇到过这种场景,就是所有的接口都是以 /api 开头的,也就是我们的api 接口请求地址是像这样的: http://www.example.com/api/order/333 或者是这样的需求 http://www.exa

随机推荐