@RequestMapping 的路径映射与通配符用法详解

目录

一、基本路径映射

二、@RequestMapping 的通配符用法

1. ? 匹配单个字符

2. * 匹配任意字符(单层路径)

3. ** 匹配多层路径

三、完整示例代码

四、运行效果

五、总结


在 SSM 框架(SpringMVC 部分)中,@RequestMapping 是最常用的注解之一,用于实现 请求路径与控制器方法的映射。除了基本的路径映射,它还支持 通配符,让我们能够更加灵活地处理请求。

本文将详细介绍 @RequestMapping 的路径映射方式,并结合通配符写法给出完整示例。


一、基本路径映射

在 SpringMVC 中,我们通常会在 Controller 类方法 上使用 @RequestMapping 来定义请求路径。

📄 文件名:HelloController.java

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/hello")  // 类级别映射
public class HelloController {

    @RequestMapping("/say")
    @ResponseBody
    public String sayHello() {
        return "Hello SSM!";
    }
}

访问路径示例:

http://localhost:8080/项目名/hello/say

返回结果:

Hello SSM!

二、@RequestMapping 的通配符用法

SpringMVC 中 @RequestMapping 支持 三种常用通配符

1. ? 匹配单个字符

@RequestMapping("/test?")
@ResponseBody
public String testQ() {
    return "匹配 /testA、/testB 等,但不匹配 /testAA";
}

示例 URL:

  • /test1

  • /testX

  • /test12


2. * 匹配任意字符(单层路径)

@RequestMapping("/test*")
@ResponseBody
public String testStar() {
    return "匹配 /testA、/test123 等,但不匹配 /test/abc";
}

示例 URL:

  • /test1

  • /testABC

  • /test/abc(多层路径不匹配)


3. ** 匹配多层路径

@RequestMapping("/test/**")
@ResponseBody
public String testDoubleStar() {
    return "匹配 /test/abc、/test/a/b/c 等任意多层路径";
}

示例 URL:

  • /test/abc

  • /test/a/b/c/d


三、完整示例代码

📄 文件名:WildcardController.java

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/wildcard")
public class WildcardController {

    // 1. ? 匹配单个字符
    @RequestMapping("/test?")
    @ResponseBody
    public String matchSingleChar() {
        return "URL 示例: /wildcard/testA 或 /wildcard/test1";
    }

    // 2. * 匹配任意字符(单层路径)
    @RequestMapping("/test*")
    @ResponseBody
    public String matchAnyChar() {
        return "URL 示例: /wildcard/testABC 或 /wildcard/test123";
    }

    // 3. ** 匹配多层路径
    @RequestMapping("/test/**")
    @ResponseBody
    public String matchMultiPath() {
        return "URL 示例: /wildcard/test/abc 或 /wildcard/test/a/b/c";
    }
}

四、运行效果

假设项目部署在 http://localhost:8080/ssm-demo/ 下:

  • 访问 http://localhost:8080/ssm-demo/wildcard/testA
    ✅ 返回:URL 示例: /wildcard/testA 或 /wildcard/test1

  • 访问 http://localhost:8080/ssm-demo/wildcard/test123
    ✅ 返回:URL 示例: /wildcard/testABC 或 /wildcard/test123

  • 访问 http://localhost:8080/ssm-demo/wildcard/test/a/b/c
    ✅ 返回:URL 示例: /wildcard/test/abc 或 /wildcard/test/a/b/c


五、总结

  • ? → 匹配单个字符

  • * → 匹配任意字符(单层路径)

  • ** → 匹配任意多层路径

合理利用 @RequestMapping 的通配符,可以让我们的请求映射更加灵活,提高接口设计的可扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值