问:@RequestMapping注解,带你梳理一下?

news2024/11/19 2:33:25

@RequestMapping 注解是 Spring MVC 框架中用于路由 HTTP 请求到相应处理方法的核心注解之一。它能够将客户端发起的 HTTP 请求映射到具体的控制器(Controller)类及其方法上,从而实现请求的处理逻辑。@RequestMapping 可以应用在类或方法上,通过指定 URL 路径、HTTP 请求方法(如 GET、POST 等)、请求参数、请求头等条件来精确匹配请求。本文将探讨 @RequestMapping 注解的作用和使用方法。

1. 基本使用

类级别注解

@RequestMapping 注解应用在类级别时,它指定了该控制器处理请求的基础路径。所有在这个控制器类中定义的方法级别的 @RequestMapping 注解都会基于这个基础路径。

@Controller
@RequestMapping("/user")
public class UserController {
    // 方法级别的 @RequestMapping 会基于类级别的路径
}

上面的例子中,UserController 类的基础路径是 /user。这意味着,这个控制器中所有方法处理的请求 URL 都会以 /user 开头。

方法级别注解

在方法级别上,@RequestMapping 可以进一步指定具体的请求路径和 HTTP 方法。

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/profile", method = RequestMethod.GET)
    public String getUserProfile() {
        // 处理 GET /user/profile 请求
        return "userProfile";
    }

    @RequestMapping(value = "/profile", method = RequestMethod.POST)
    public String updateUserProfile() {
        // 处理 POST /user/profile 请求
        return "updateSuccess";
    }
}

在这个例子中,getUserProfile 方法处理的是 GET /user/profile 请求,而 updateUserProfile 方法处理的是 POST /user/profile 请求。

2. 支持的属性

@RequestMapping 注解提供了多个属性来精确匹配请求。

  • valuepath:用于指定请求的 URL 路径。
  • method:指定请求的 HTTP 方法(GET、POST、PUT、DELETE 等)。
  • params:指定请求必须包含的参数。
  • headers:指定请求必须包含的 HTTP 头。
  • consumes:指定处理请求的提交内容类型(Content-Type),如 application/json
  • produces:指定返回的内容类型,如 application/json
示例:使用属性进行精确匹配
@Controller
@RequestMapping("/search")
public class SearchController {

    @RequestMapping(
        value = "/results",
        method = RequestMethod.GET,
        params = {"query", "type"},
        headers = "Accept=application/json",
        produces = "application/json"
    )
    public @ResponseBody List<SearchResult> search() {
        // 处理符合条件的请求,并返回 JSON 格式的结果
        return new ArrayList<>();
    }
}

在这个例子中,search 方法处理的请求必须满足以下条件:

  • URL 路径为 /search/results
  • HTTP 方法为 GET。
  • 请求参数必须包含 querytype
  • 请求头中必须包含 Accept=application/json
  • 响应的内容类型为 application/json

3. 简化注解

为了简化常见的 HTTP 方法映射,Spring 提供了一系列特定的注解,如 @GetMapping@PostMapping@PutMapping@DeleteMapping 等,它们是 @RequestMapping 的简化形式。

@Controller
@RequestMapping("/product")
public class ProductController {

    @GetMapping("/{id}")
    public String getProduct(@PathVariable Long id) {
        // 处理 GET /product/{id} 请求
        return "productDetail";
    }

    @PostMapping
    public String createProduct() {
        // 处理 POST /product 请求
        return "productCreated";
    }

    @PutMapping("/{id}")
    public String updateProduct(@PathVariable Long id) {
        // 处理 PUT /product/{id} 请求
        return "productUpdated";
    }

    @DeleteMapping("/{id}")
    public String deleteProduct(@PathVariable Long id) {
        // 处理 DELETE /product/{id} 请求
        return "productDeleted";
    }
}

4. @RequestMapping 的高级用法

路径变量(@PathVariable)

路径变量允许你将 URL 中的一部分作为参数传递到控制器方法中。

@RequestMapping(value = "/user/{userId}", method = RequestMethod.GET)
public String getUser(@PathVariable("userId") Long userId) {
    // 处理 GET /user/{userId} 请求,其中 {userId} 是路径变量
    return "userInfo";
}
请求参数(@RequestParam)

@RequestParam 注解用于将请求参数绑定到控制器方法的参数上。

@RequestMapping(value = "/search", method = RequestMethod.GET)
public String search(@RequestParam("query") String query) {
    // 处理 GET /search?query=xxx 请求
    return "searchResults";
}
请求体(@RequestBody)

@RequestBody 注解用于将 HTTP 请求体绑定到控制器方法的参数上,通常用于处理 JSON 或 XML 数据。

@RequestMapping(value = "/user", method = RequestMethod.POST)
public String createUser(@RequestBody User user) {
    // 处理 POST /user 请求,请求体为 JSON 格式的 User 对象
    return "userCreated";
}
响应体(@ResponseBody)

@ResponseBody 注解用于将控制器方法的返回值作为 HTTP 响应体返回,通常用于返回 JSON 或 XML 数据。

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable Long id) {
    // 处理 GET /user/{id} 请求,返回 JSON 格式的 User 对象
    return new User(id, "Name");
}

5. 总结

@RequestMapping 注解是 Spring MVC 中用于映射 HTTP 请求到控制器方法的强大工具。通过灵活运用其各种属性,你可以精确地控制哪些请求被哪个方法处理。此外,Spring 还提供了一系列简化的注解(如 @GetMapping)来进一步简化配置。结合路径变量、请求参数、请求体和响应体的使用,你可以构建出功能丰富、响应迅速的 Web 应用程序。

在实际开发中,合理设计 URL 结构、选择合适的 HTTP 方法、正确处理请求和响应,都是构建高质量 Web 服务的关键。@RequestMapping 及其相关注解为你提供了强大的支持,帮助你实现这些目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

预处理(1)(手绘)

大家好&#xff0c;今天给大家分享一下编译器预处理阶段&#xff0c;那么我们来看看。 上面是一些预处理阶段的知识&#xff0c;那么明天给大家讲讲宏吧。 今天分享就到这里&#xff0c;谢谢大家&#xff01;&#xff01;

ZYNQ程序固化——ZYNQ学习笔记7

一、ZYNQ启动过程 二、 SD卡启动实操 1、对ZYNQ进行配置添加Flash 2、添加SD卡 3、重新生成硬件信息 4、创建vitis工程文件 5、勾选板级支持包 6、对系统工程进行整体编译&#xff0c;生成两个Debug文件&#xff0c;如图所示。 7、插入SD卡&#xff0c;格式化为 8、考入BOOT.…

FPGA实现PCIE采集电脑端视频转SFP光口万兆UDP输出,基于XDMA+GTX架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案10G Ethernet Subsystem实现万兆以太网物理层方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC…

Mongo数据库集群搭建

目录 1、Mongo集群优势 1.1 高可用性 1.2 水平扩展性 1.3 高性能 1.4 灵活的架构设计 1.5 数据安全 1.6 管理与监控 2、下载指定操作系统版本包 3、部署和验证工作 3.1 准备配置文件及依赖 3.2 启动第一个节点 3.3 部署更多的节点 3.4 初始化副本集 3.5 设置管理…

创建vue3项目步骤

脚手架创建项目&#xff1a; pnpm create vue Cd 项目名称安装依赖&#xff1a;Pnpm iPnpm Lint&#xff1a;修复所有文件风格 &#xff0c;不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库&#xff1a;提交前做代码检查 pnpm dlx husky-in…

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

nfs服务器--RHCE

一&#xff0c;简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计 算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言&#xff1a;脚本写成并非一蹴而就&#xff0c;需要不断的调式和修改&#xff0c;这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景&#xff1a;在某些项目中&#xff0c;由于特定的安全或政策要求&#xff0c;不允许连接到你的镜像仓库。然而…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…

Unet++改进28:添加PPA(2024最新改进方法)|多分支特征提取策略,捕获不同尺度和层次的特征信息。

本文内容:添加PPA 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 红外小目标检测是一项重要的计算机视觉任务,涉及对红外图像中通常只有几个像素的微小目标进行识别和定位。然而,由于红外图像中物体的体积小,背景一般比较复杂,这给红外图像的识别带来…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度&#xff1a;1,方向&#xff1a;Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接&#xff1a;攻防世界Web方向新手模式第16题。 打开一看给了很多提示&#xff0c;什么language在index.php的第九行&#xff0c;flag在flag.php中&#xff0c;但事情显…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C&#xff08;手机/平板等&#xff09;视频信号输入1路MIC1路LINE OUT,带1路HDMI环出&#xff0c;USB免驱&#xff0c;分辨率4K60&#xff0c;可采集3路信号中其中1路&#xff0c;按钮切换&#xff0c;可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 实践 我们需要先选这一个模板&#xff0c;具体流程参考…

解决Xeyes: Error can‘t open display,远程X无法连通问题。

一、问题分析 提前申明&#xff1a; 本次实验使用REHL 8 进行操作&#xff01; 客户机 A 为X-Client &#xff0c;即远程X的客户端。 服务机 B 为X-Server&#xff0c;即远程X的服务端。 问题的所有操作均在已经配置好Xorg的前提下进行的&#xff0c;不知道不配置会有什么影响&…

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍&#xff0c;它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速&#xff0c;小型且功能丰富的JavaScript库&#xff0c;jQuery设计宗旨是“write less&#xff0c;do more”&#xff0c;即倡导写更少的代码&#xff0c;做更多的事&#xf…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统&#xff0c;旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展&#xff0c;学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而&#xff0c;传统的专注度评估方法往往依赖于主观…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词&#xff0c;然后根据各部分提示词进行融合生成图片。如下图&#xff1a; 此图像包含 4 个不同的区域&#xff1a;夜晚、傍晚、白天、早晨 二、部署 环境要求&#xff1a; 最低显存&#xff1a;10G 1. 部署ComfyUI 本篇的模型部署…