Spring MVC 请求类型注解详解

Spring MVC 请求类型注解详解


1. 核心注解分类

Spring MVC 中的请求处理注解分为以下几类:

类别注解示例作用范围
方法级注解@RequestMapping, @GetMapping方法级别
参数级注解@RequestParam, @RequestBody方法参数
模型/会话注解@ModelAttribute, @SessionAttributes方法或类级别

2. 方法级注解详解
@RequestMapping

功能:定义请求映射规则,支持所有 HTTP 方法。

属性列表

属性说明示例
method指定支持的 HTTP 方法(如 RequestMethod.GET)。method = RequestMethod.POST
value请求路径(可省略,与 path 等效)。value = "/user"path = "/user"
params条件过滤:请求参数需满足指定条件(如 param1, !param2)。params = {"name", "!age"}
headers条件过滤:HTTP 头需满足指定条件(如 User-Agent:Chrome)。headers = "Content-Type=application/json"
consumes限制请求内容类型(如 MediaType.APPLICATION_JSON_VALUE)。consumes = MediaType.APPLICATION_JSON_VALUE
produces限制响应内容类型(如 text/html)。produces = "text/html"

@GetMapping / @PostMapping 等

功能@RequestMapping 的简化版,按 HTTP 方法分类:

  • @GetMapping:对应 method = RequestMethod.GET
  • @PostMapping:对应 method = RequestMethod.POST
  • @PutMapping:对应 method = RequestMethod.PUT
  • @DeleteMapping:对应 method = RequestMethod.DELETE
  • @PatchMapping:对应 method = RequestMethod.PATCH

3. 参数级注解详解
@RequestParam

功能:绑定 URL 查询参数或表单参数到方法参数。

属性列表

属性说明示例
value参数名称(可省略,与 name 等效)。value = "id"name = "id"
required是否必须(默认 true)。required = false
defaultValue参数缺失时的默认值。defaultValue = "0"

示例

@GetMapping("/user")
public String getUser(@RequestParam("id") int userId) { ... }

@PathVariable

功能:绑定 URL 路径中的变量到方法参数。

属性列表

属性说明示例
value路径变量名称。value = "id"
required是否必须(默认 true)。required = false

示例

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") String userId) { ... }

@RequestBody

功能:将 HTTP 请求体(如 JSON/XML)反序列化为 Java 对象。

属性

  • 无显式属性,直接用于方法参数。
  • 依赖 MappingJackson2HttpMessageConverter(JSON)或自定义转换器。

示例

@PostMapping("/user")
public User createUser(@RequestBody User user) { ... }

@RequestHeader

功能:绑定 HTTP 请求头到方法参数。

属性列表

属性说明示例
value请求头名称。value = "User-Agent"
required是否必须(默认 true)。required = false
defaultValue缺省值。defaultValue = "unknown"

示例

@GetMapping("/headers")
public String getHeaders(@RequestHeader("User-Agent") String userAgent) { ... }

@CookieValue

功能:绑定 Cookie 值到方法参数。

属性列表

属性说明示例
valueCookie 名称。value = "JSESSIONID"
required是否必须(默认 true)。required = false
defaultValue缺省值。defaultValue = "not-set"

示例

@GetMapping("/cookie")
public String getCookie(@CookieValue("theme") String theme) { ... }

4. 模型/会话注解
@ModelAttribute

功能

  1. 方法级:在目标方法执行前预处理模型数据(如填充对象)。
  2. 参数级:将请求参数绑定到 Java 对象。

示例

// 方法级:预加载数据
@ModelAttribute("user")
public User getUser() {return new User();
}// 参数级:绑定参数到对象
@PostMapping("/user")
public String saveUser(@ModelAttribute User user) { ... }
@SessionAttributes

功能:将模型属性存储到 HTTP Session。

属性

  • value:需存储的属性名列表(如 {"user"})。
  • types:需存储的属性类型列表。

示例

@Controller
@SessionAttributes({"user"})
public class UserController { ... }

5. 文件上传注解
@RequestPart

功能:处理多部分请求中的文件或参数(结合 @RequestParam)。

示例

@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) { ... }

6. 总结表格
注解类型注解名称作用参数示例
方法级@RequestMapping定义请求映射规则(路径、方法、条件等)。method = POST, consumes = "application/json"
HTTP 方法专用@GetMapping仅处理 GET 请求。/user/{id}
参数绑定@RequestParam绑定查询参数或表单参数。@RequestParam("id") int userId
路径变量@PathVariable绑定 URL 路径中的变量。@PathVariable("id") String userId
请求体@RequestBody反序列化请求体为对象。@RequestBody User user
HTTP 头@RequestHeader绑定请求头值。@RequestHeader("User-Agent") String agent
Cookie@CookieValue绑定 Cookie 值。@CookieValue("theme") String theme
模型/会话@ModelAttribute绑定对象或预加载模型数据。@ModelAttribute User user
文件上传@RequestPart处理多部分请求中的文件或参数。@RequestPart("file") MultipartFile file

关键总结

  1. 方法级注解:定义请求路径和条件,优先使用 @GetMapping 等 HTTP 方法专用注解。
  2. 参数级注解:根据数据来源(路径、请求体、请求头等)选择对应注解。
  3. 模型/会话@ModelAttribute 用于对象绑定和预处理,@SessionAttributes 管理会话数据。
  4. 最佳实践
    • 使用 @RequestBody 处理 JSON/XML 请求体。
    • 通过 @RequestParam@PathVariable 精确控制参数来源。
    • 结合 @Valid 注解实现参数校验(需 @ControllerAdvice 处理异常)。

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

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

相关文章

C#: DxF文件中Spline解析

以下是使用C#解析DXF文件中Spline(样条曲线)的完整代码示例,使用流行的netDxf库来处理DXF文件: 1. 安装netDxf库 首先通过NuGet安装netDxf库: Install-Package netDxf 2. 完整Spline解析代码 using System; using System.Collections.Ge…

【软考系统架构设计师】系统架构设计知识点

1、 从需求分析到软件设计之间的过渡过程称为软件架构。 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。 软件架构不仅指定了系统的组织结构和…

二.springBoot项目集成ElasticSearch及使用

二.springBoot项目集成ElasticSearch及使用 1.依赖引入2.ElasticSearch常见用法 1.依赖引入 <!--elasticsearch搜索引擎--> <!--高版本7.0后TransportClient已被淘汰&#xff0c;用rest-high-level-client代替--> <dependency><groupId>org.elasticse…

微服务多模块构建feign项目过程与一些报错(2025详细版)

目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…

第十一届 蓝桥杯 嵌入式 省赛

一、分析 本届的风格又变了一番&#xff0c;但是难度也降低了些。 又是考察了 PWM 和 ADC。 第八、九届也考察了 PWM。建议先复习这两届&#xff0c;再回来模拟。 LCD的显示也提了额外的要求。 1. 功能概述 电位器 R37 输出的模拟电压信号 PA6输出频率固定&#xff0c;占…

小试牛刀-抽奖程序

编写抽奖程序 需求&#xff1a;设计一个抽奖程序&#xff0c;点击抽奖按钮随机抽取一个名字作为中奖者 目标&#xff1a;了解项目结构&#xff0c;简单UI布局&#xff0c;属性方法、事件方法&#xff0c;程序运行及调试 界面原型 ​ 待抽奖&#xff1a; 点击抽奖按钮&#x…

代码随想录算法训练营day2(数组)

华子目录 长度最小的子数组思路 螺旋矩阵思路总结 长度最小的子数组 https://leetcode.cn/problems/minimum-size-subarray-sum/ 思路 使用滑动窗口&#xff0c;left表示滑动窗口的起始点&#xff0c;right表示滑动窗口的终点 class Solution:def minSubArrayLen(self, targ…

6.1 GitHub亿级数据采集实战:双通道架构+三级容灾设计,破解API限制与反爬难题

GitHub 项目数据获取功能设计与实现 关键词:GitHub API 集成、网页爬虫开发、数据存储设计、定时任务调度、异常处理机制 1. 数据获取架构设计 采用双通道数据采集策略,同时使用 GitHub 官方 API 和网页爬虫技术确保数据完整性: #mermaid-svg-XUg7xhHrzFAozG4J {font-fami…

设计模式(结构型)-桥接模式

目录 摘要 定义 类图 角色 具体实现 优缺点 优点 缺点 使用场景 使用案例 JDBC 和桥接模式 总结 摘要 在软件开发领域&#xff0c;随着系统规模和复杂性的不断攀升&#xff0c;如何设计出具有良好扩展性、灵活性以及可维护性的软件架构成为关键挑战。桥接模式作为一…

Go 微服务框架 | 中间件

文章目录 定义中间件前置中间件后置中间件路由级别中间件 定义中间件 中间件的作用是给应用添加一些额外的功能&#xff0c;但是不会影响原有应用的编码方式&#xff0c;想用的时候直接添加&#xff0c;不想用的时候也可以轻松去除&#xff0c;实现所谓的可插拔。中间件的实现…

leetcode 198. House Robber

本题是动态规划问题。 第一步&#xff0c;明确并理解dp数组以及下标的含义 dp[i]表示从第0号房间一直到第i号房间(包含第i号房间)可以偷到的最大金额&#xff0c;具体怎么偷这里不考虑&#xff0c;第i1号及之后的房间也不考虑。换句话说&#xff0c;dp[i]也就是只考虑[0,i]号…

掌趣科技前端面试题及参考答案

你使用 Vue 的频率如何,用得比较多吗? 在前端开发工作中,我对 Vue 的使用较为频繁。Vue 作为一款轻量级、易于上手且功能强大的前端框架,在众多项目里都发挥着重要作用。 在日常的项目里,Vue 的组件化开发特性为我带来了极大的便利。组件化能够将页面拆分成多个小的、可复…

深入解析Python爬虫技术:从基础到实战的功能工具开发指南

一、引言:Python 爬虫技术的核心价值 在数据驱动的时代,网络爬虫作为获取公开数据的重要工具,正发挥着越来越关键的作用。Python 凭借其简洁的语法、丰富的生态工具以及强大的扩展性,成为爬虫开发的首选语言。根据 Stack Overflow 2024 年开发者调查,68% 的专业爬虫开发者…

CSS 笔记——Flexbox(弹性盒布局)

目录 1. Flex 容器与 Flex 项目 2. 主轴与交叉轴 3. Flex 容器的属性 display flex-direction justify-content align-items align-content flex-wrap 4. Flex 项目的属性 flex-grow flex-shrink flex-basis flex align-self 5. Flexbox 的优点 6. Flexbox 的…

Java学习手册:Java反射与注解

Java反射&#xff08;Reflection&#xff09;和注解&#xff08;Annotation&#xff09;是Java语言中两个强大的特性&#xff0c;它们在框架开发和复杂应用中扮演着重要角色。反射允许程序在运行时检查和操作类、对象、接口、字段和方法&#xff0c;而注解则提供了一种元数据形…

JavaWeb遇到的问题汇总

问题一&#xff1a;&#xff08;键值对最后一项没有逗号&#xff09; 在JSON字符串转自定义对象和自定义对象转JSON字符串时&#xff1a; 如图所示&#xff1a;若忘记删除键值对的最后一项没有逗号时&#xff0c;则下一句转换不会生效&#xff0c;应该删除最后一项的逗号。 解…

模板引擎语法-变量

模板引擎语法-变量 文章目录 模板引擎语法-变量&#xff08;一&#xff09;在Django框架模板中使用变量的代码实例&#xff08;二&#xff09;在Django框架模板中使用变量对象属性的代码实例&#xff08;三&#xff09;在Django框架模板中使用变量显示列表 &#xff08;一&…

AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS

Auto-RAG&#xff1a;用于大型语言模型的自主检索增强生成 单位&#xff1a;中科院计算所 代码&#xff1a; https://github.com/ictnlp/Auto-RAG 拟解决问题&#xff1a;通过手动构建规则或者few-shot prompting产生的额外推理开销。 贡献&#xff1a;提出一种以LLM决策为中…

Python 基础语法汇总

Python 语法 │ ├── 基本结构 │ ├── 语句&#xff08;Statements&#xff09; │ │ ├── 表达式语句&#xff08;如赋值、算术运算&#xff09; │ │ ├── 控制流语句&#xff08;if, for, while&#xff09; │ │ ├── 定义语句&#xff08;def…

一文详解ffmpeg环境搭建:Ubuntu系统ffmpeg配置nvidia硬件加速

在Ubuntu系统下安装FFmpeg有多种方式,其中最常用的是通过apt-get命令和源码编译安装。本文将分别介绍这两种方式,并提供安装过程。 一、apt-get安装 使用apt-get命令安装FFmpeg是最简单快捷的方式,只需要在终端中输入以下命令即可: # 更新软件包列表 sudo apt-get updat…