目录
在 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
的通配符,可以让我们的请求映射更加灵活,提高接口设计的可扩展性。