Spring @RequestMapping 注解及使用技巧详解

 更新时间:2025年06月06日 11:28:29   作者:可问 可问春风  
@RequestMapping是Spring MVC 中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法,下面给大家介绍Spring @RequestMapping 注解及使用技巧,感兴趣的朋友一起看看吧

@RequestMapping 是 Spring MVC 中 定义请求映射规则的核心注解,用于将 HTTP 请求映射到 Controller 处理方法。以下通过场景化解释其功能、参数及使用技巧:

一、核心作用

URL 路径映射
将特定 URL 请求路由到对应的 Controller 方法。

@Controller
@RequestMapping("/user")  // 类级别路径,所有方法路径前添加 /user
public class UserController {
    @RequestMapping("/profile")  // 完整路径:/user/profile
    public String profile() {
        return "user/profile";
    }
}

支持多种HTTP方法
通过 method 参数限定请求方法(GET、POST等)。

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createUser(User user) {
    userService.save(user);
    return "redirect:/user/list";
}

多请求处理
支持同时响应多个 URL 路径或请求参数。

@RequestMapping(value = {"/list", "/all"}, method = RequestMethod.GET)
public String listUsers(Model model) {
    model.addAttribute("users", userService.findAll());
    return "user/list";
}

二、关键参数说明

参数作用描述示例
value / path指定映射的URL路径(可多路径)@RequestMapping("/api/user")
method限制HTTP请求方法(GET、POST等)method = RequestMethod.PUT
params要求请求必须包含特定参数params = "type=admin" (参数须为 type=admin
headers限制请求头条件headers = "Content-Type=application/json"
consumes指定处理的请求内容类型(Content-Type)consumes = MediaType.APPLICATION_JSON_VALUE
produces指定响应内容的类型(Accept头匹配)produces = "text/plain;charset=UTF-8"

三、快捷组合注解

Spring 4.3+ 提供简化的HTTP方法注解,替代 method 参数配置:

  • @GetMapping → @RequestMapping(method = GET)
  • @PostMapping → @RequestMapping(method = POST)
  • @PutMapping@DeleteMapping@PatchMapping

用法示例

@RestController
@RequestMapping("/api/v1")
public class UserApiController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
    @PostMapping("/users")
    public ResponseEntity<?> createUser(@RequestBody User user) {
        userService.save(user);
        return ResponseEntity.created(URI.create("/users/" + user.getId())).build();
    }
}

四、动态路径参数(@PathVariable)

通过 {变量名} 语法捕获 URL 路径中的动态值,搭配 @PathVariable 使用:

@GetMapping("/detail/{userId}/{type}")
public String userDetail(
    @PathVariable("userId") Long id, 
    @PathVariable String type  // 变量名相同可省略参数
) {
    // 示例URL:/user/detail/123/admin
    // id=123, type="admin"
    return "user/detail";
}

五、匹配请求参数(params条件)

要求存在某个参数

@RequestMapping(value = "/search", params = "keyword")
public String searchByKeyword(String keyword) { ... }

参数值匹配指定模式

@GetMapping(value = "/filter", params = "status=active")
public List<User> getActiveUsers() { ... }

六、常见问题与解决

1. 路径冲突问题

  • 问题:多个处理方法映射到同一路径导致冲突。
  • 解决:通过 method 或 params 进一步区分请求。
@GetMapping("/edit")
public String editForm() { ... }
@PostMapping("/edit")
public String saveEdit(User user) { ... }

2. 模糊匹配优先问题

  • 问题/user/* 和 /user/123 同时存在时,优先匹配更具体的路径。
  • 规则:Spring 优先匹配精确路径,再匹配通配符路径。

七、最佳实践

RESTful 风格设计
使用HTTP方法区分操作:

  • GET → 查询资源
  • POST → 新增资源
  • PUT → 更新完整资源
  • PATCH → 部分更新资源
  • DELETE → 删除资源

显式指定 Content-Type
使用 consumesproduces 明确请求与响应格式:

@PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
public User createUserJson(@RequestBody User user) { ... }

推荐使用组合注解
优先用 @GetMapping@PostMapping,提升代码可读性。

八、其他特性

Ant风格通配符支持

  • ?: 匹配单个字符
  • *: 匹配任意数量的字符(不包含路径分隔符)
  • **: 跨多级路径匹配(例如 /api/** 匹配 /api/users/123
@GetMapping("/files/*.txt")  // 匹配 /files/note.txt 或 /files/data.txt
public String handleTextFiles() { ... }

总结

  • 核心定位@RequestMapping 是定义 HTTP 请求入口的关键注解。
  • 简化开发:通过 组合注解 + PathVariable + 参数条件 实现 RESTful 接口。
  • 注意点:确保路径唯一性,避免冲突;优先使用组合注解提升代码清晰度。

到此这篇关于Spring @RequestMapping 注解及使用技巧详解的文章就介绍到这了,更多相关Spring @RequestMapping 注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    本篇文章主要介绍了详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • 带你入门Java的类与对象

    带你入门Java的类与对象

    下面小编就为大家带来一篇深入理解Java 对象和类。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能给你带来帮助
    2021-07-07
  • java利用POI读取excel文件的方法

    java利用POI读取excel文件的方法

    这篇文章主要介绍了java利用POI读取excel文件的方法,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-12-12
  • Spring中自定义数据类型转换的方法详解

    Spring中自定义数据类型转换的方法详解

    Spring3引入了一个core.onvert包,提供一个通用类型转换系统。在Spring容器中,可以使用这个系统作为PropertyEditor实现的替代,将外部化的bean属性值字符串转换为所需的属性类型。本文将详解这一系统的使用方法,需要的可以参考一下
    2022-06-06
  • 序列化版本号serialVersionUID的作用_动力节点Java学院整理

    序列化版本号serialVersionUID的作用_动力节点Java学院整理

    Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象,这篇文章主要介绍了序列化版本号serialVersionUID的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • java中final修饰符实例分析

    java中final修饰符实例分析

    本文通过实例向我们展示了java中final修饰符的概念,final修饰的基本变量和引用类型变量的区别。有需要的小伙伴可以参考下
    2014-11-11
  • java安全之CommonsCollections4详解

    java安全之CommonsCollections4详解

    这篇文章主要介绍了java安全之CommonsCollections4详解
    2022-08-08
  • 在SpringBoot中记录用户操作日志功能

    在SpringBoot中记录用户操作日志功能

    在Web应用程序开发中,记录用户操作日志是一项非常重要的任务,它可以帮助我们追踪用户行为,分析系统状况,以及审计系统的安全性,本文将介绍如何在SpringBoot框架中实现用户操作日志的记录功能,感兴趣的朋友一起看看吧
    2024-12-12
  • Java数据类型之细讲char类型与编码关系

    Java数据类型之细讲char类型与编码关系

    这几天一直在复习Java基础知识,特地写了一篇文章来做一下笔记,文中有非常详细的图文示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • java基础的详细了解第五天

    java基础的详细了解第五天

    这篇文章对Java编程语言的基础知识作了一个较为全面的汇总,在这里给大家分享一下。需要的朋友可以参考,希望能给你带来帮助
    2021-08-08

最新评论