Spring:@RequestMapping注解,匹配的顺序与上下文无关

在Spring框架中,使用@RequestMapping注解时,匹配的顺序确实与应用名(或者说上下文路径)无关,而是依赖于几个关键因素,包括请求的URL、HTTP方法(如GET、POST等)、以及@RequestMapping注解的参数配置。

匹配顺序的主要因素

‌URL模式匹配‌:

当多个@RequestMapping注解的URL模式匹配同一个请求时,Spring会按照以下顺序进行匹配:

‌精确匹配‌:例如,如果有一个@RequestMapping("/user")和一个@RequestMapping("/user/profile"),那么对于路径为/user/profile的请求,将匹配到后者。

‌模式匹配‌:例如,如果有一个@RequestMapping("/user/*")和一个@RequestMapping("/user/profile"),则对于路径为/user/profile的请求,将匹配到后者。

‌路径变量的匹配‌:例如,@RequestMapping("/user/{id}")可以匹配任何形如/user/123的路径。

‌HTTP方法‌:

如果同一个URL模式被多个方法(如GET、POST等)使用,那么会根据请求的HTTP方法进行匹配。例如,如果有两个方法都映射到/user,一个用于GET请求,另一个用于POST请求,那么根据HTTP请求的类型(GET或POST),将选择相应的处理方法。

示例

@RestController

public class MyController {

@RequestMapping(value = "/user", method = RequestMethod.GET)

public String getUser() {

return "Getting user";

}

@RequestMapping(value = "/user", method = RequestMethod.POST)

public String createUser() {

return "Creating user";

}

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)

public String getUserById(@PathVariable String id) {

return "Getting user with ID: " + id;

}

}

注意事项

‌应用名或上下文路径‌:虽然应用名(如通过server.servlet.context-path在application.properties中设置)会影响URL的基础路径,但它本身并不影响@RequestMapping注解内部的处理逻辑。例如,如果应用部署在/app路径下,那么对于请求/app/user,它将正确地映射到相应的控制器方法。

‌优先级‌:在Spring MVC中,如果有多个@RequestMapping可以匹配到同一个请求,可以通过添加@Order注解或者在方法级别上使用@RequestMapping(params="paramName")等条件来明确指定优先级。

总之,尽管应用名可以改变基础URL路径,但具体的路由匹配逻辑和优先级是基于URL模式、HTTP方法和注解的其他参数(如params, headers等)来决定的。

相关推荐
香蕉大香蕉(06敬畏市场)4 分钟前
MySQL 单点详解(08)
java·数据库·mysql·面试·八股
thefool1122668 分钟前
HTTPS协议
java
acd1200916 分钟前
Nginx 反向代理的缓冲区坑:后端响应大时接口偶发 502
java·运维·nginx
装不满的克莱因瓶18 分钟前
支付订单成功异步MQ权益发放设计和开发
java·架构·系统架构·rabbitmq·硬件架构
掘金者阿豪25 分钟前
MongoDB迁移到金仓数据库:商品属性继续灵活存,订单报表交给 SQL
前端·后端
zhoujungis26 分钟前
限流算法实测:固定窗口 2 倍溢出、令牌桶突刺 | 尘世栈帧
后端
高冷小鱼殿下37 分钟前
内部类Lambda与枚举
java·开发语言
小蒜学长1 小时前
编程语言在线学习平台的设计与实现(代码+数据库+LW)
java·spring boot·后端·编程语言在线学习平台·在线编码
Flynn Liang1 小时前
Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)
人工智能·spring·文生图·音视频·语音合成·tts·springai
步行cgn2 小时前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc