SpringBoot自定义请求前缀

✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

👉 点击直达→ 盹猫猫的个人小站 👈

🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

[👨 前言](#👨 前言)

[🫧 环境准备](#🫧 环境准备)

[🍃 版本](#🍃 版本)

[🍃 Pom依赖](#🍃 Pom依赖)

[🌲 代码步骤](#🌲 代码步骤)

[1️⃣ 全局路径](#1️⃣ 全局路径)

[2️⃣ 继承路径](#2️⃣ 继承路径)

[🥭 抽象类](#🥭 抽象类)

[🥭 继承类](#🥭 继承类)

[3️⃣ 配置文件](#3️⃣ 配置文件)

[💣 疑问解答](#💣 疑问解答)

[📚 总结](#📚 总结)


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

**SpringBoot自定义请求路径**

❤博主广交技术好友,喜欢文章的可以关注一下❤

👨 前言

在web开发中,自定义路径是非常重要的,它可以更容易的区分不同服务和不同的功能模块,使后端服务接口变得更加有序(完全无规则的接口简直糟糕透了) ,SpringBoot经常用于web开发,当然也可以进行路径的自定义,这篇文章就是记录如何在SpringBoot中进行自定义接口路径的开发.

🫧 环境准备

🍃 版本

依赖 版本
JDK 21
SpringBoot 3.5.6

🍃 Pom依赖

复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.6</version>
    </parent>
    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

只需要进行路径配置,只用到基础的springboot的web依赖和JDK.

🌲 代码步骤

1️⃣ 全局路径

在SpringBoot中如果想整个应用程序都使用自定义的路径前缀,可以直接在配置文件中进行配置,该配置主要用于标识运行某一个程序或服务. 配置内容如下:

复制代码
server:
    servlet:
        context-path: /myapp

这样在请求时就需要在请求时加入 /myapp 前缀作为请求. 即:

http://localhost:8080/users

变为

http://localhost:8080/myapp/users

2️⃣ 继承路径

在SpringBoot中同样支持使用继承的方式来实现自定义的路径,即一个子控制器类继承一个父控制器抽象类.

如下代码:

🥭 抽象类

java 复制代码
package com.nodcat.api;

import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/api")
public abstract class AbsUserController {
}

🥭 继承类

java 复制代码
package com.nodcat;

import com.nodcat.api.AbsUserController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController extends AbsUserController {

    @GetMapping("/users")
    public String user() {
        return "Hello, user!";
    }
}

这样我们就可以通过下面的请求获取用户:

http://localhost:8080/api/users

3️⃣ 配置文件

如果要进行不同的包内所有类的路径的自定义配置,可以通过继承WebMvcConfigurer自定义配置类的方式进行,代码如下:

java 复制代码
package com.nodcat.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Map;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    //app商家接口
    //app消费者接口
    //管理员接口
    //开放接口
    private final Map<String, String> prefixToPackage = Map.of(
            "/app/merchant", "com.nodcat.api.app.merchant",
            "/app/consumer", "com.nodcat.api.app.consumer",
            "/admin", "com.nodcat.api.admin",
            "/open", "com.nodcat.api.open"
    );

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        prefixToPackage.forEach((prefix, pkg) ->
                configurer.addPathPrefix(prefix, c -> c.getPackage().getName().startsWith(pkg))
        );
    }
}

通过上述配置,我们就对app商家接口,app消费者接口,管理员接口,开放接口进行前缀的区分,我们只需要在对应的包内实现对应的控制器就可以了. (在com.nodcat.api.admin包下的所有控制器路径都前缀都会加上/admin,即管理员的控制器)

💣 疑问解答

🤔 直接通过继承的方式,在子类使用@RequestMapping 可以实现路径拼接么?

📢****不可以,在子类中使用@RequestMapping会覆盖父类的@RequestMapping的路径定义,路径不会被拼接.

📚 总结

自定义路径可以通过[全局路径⚡ 继承路径⚡ 配置文件⚡] 的方式进行,你可以在实际开发中按实际需要进行选择.

上面就是所有文章信息了,如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!


如果你对区块链 内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

相关推荐
爱学大树锯4 小时前
【Spring Boot JAR 解压修改配置后重新打包全流程(避坑指南)】
spring boot·后端·jar
kobe_OKOK_4 小时前
Django ORM 无法通过 `ForeignKey` 自动关联,而是需要 **根据父模型中的某个字段(比如 ID)去查询子模型**。
后端·python·django
Jabes.yang5 小时前
Java求职面试:从Spring Boot到Kafka的技术探讨
java·spring boot·面试·kafka·互联网大厂
程序员爱钓鱼5 小时前
Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
后端·算法·go
canonical_entropy5 小时前
DDD本质论:从哲学到数学,再到工程实践的完整指南之实践篇
java·后端·领域驱动设计
_Power_Y5 小时前
Java面试常用算法api速刷
java·算法·面试
纪莫5 小时前
技术面:Spring (事务传播机制、事务失效的原因、BeanFactory和FactoryBean的关系)
java·spring·java面试⑧股
该用户已不存在6 小时前
别再用 if err != nil 了,学会这几个技巧,假装自己是Go大神
后端·go
红衣小蛇妖6 小时前
LeetCode-704-二分查找
java·算法·leetcode·职场和发展