news 2026/4/27 20:17:55

@RequestMapping注解的各个属性作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
@RequestMapping注解的各个属性作用

1.default-consumes-media-type: multipart/form-datadefault-produces-media-type: application/json

default-consumes-media-type: multipart/form-datadefault-produces-media-type: application/json常见于 API 规范(如 OpenAPI)或某些框架(如 Spring、JAX-RS、Micronaut)的配置上下文,用于定义接口默认的请求内容类型默认的响应内容类型

含义解释

  • default-consumes-media-type: multipart/form-data
    表示接口默认接收的请求数据格式为multipart/form-data

    • 该格式常用于文件上传混合表单数据(文本字段+文件)。

    • 请求体被划分为多个部分(parts),每个部分可携带不同的数据类型和编码。

    • 示例:用户头像上传、带附件的表单提交。

  • default-produces-media-type: application/json
    表示接口默认返回的数据格式为application/json

    • 响应体是标准的 JSON 结构化数据。

    • 当前大多数 REST API 使用此格式进行数据交换,易于解析和调试。

典型使用场景

  • 你正在编写一个文件上传 + 返回 JSON 消息的 API,例如:

    客户端通过multipart/form-data上传图片,服务端处理后返回{"status": "success", "url": "..."}

  • OpenAPI (Swagger)Spring MVC中,可以在全局/类级别设定默认的consumesproduces,避免每个接口重复声明。例如:

    Spring Boot 示例

    java

    @RequestMapping( consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE ) public class FileController { ... }

    OpenAPI 3 全局配置(YAML 片段)

    yaml

    openapi: 3.0.0 # 某些工具允许设置默认 consumes/produces,但标准写法是在路径或操作层指定

注意事项

  • 这些是默认值,你仍然可以为某个具体操作覆盖它们(例如某个接口只接收 JSON,或返回纯文本)。

  • 如果你的接口不是全局统一使用multipart/form-data请求,建议谨慎设置默认值,避免错误地要求所有请求都必须使用该格式。

  • multipart/form-data的请求在 OpenAPI 3 中需要搭配requestBody.content.multipart/form-data.schema描述各 part 的结构。

2.@RequestMapping及派生注解

@RequestMapping源码是 Spring Web 中所有请求映射的根本注解。下面我会逐属性解释,并说明它与@PostMapping@GetMapping等派生注解的关系。


一、@RequestMapping各属性含义与作用

属性类型默认值作用说明
nameString""为映射指定一个逻辑名称,用于辅助工具(如 Swagger)生成文档或在日志中识别,不参与实际匹配。
value/pathString[]{}两者互为别名,用于指定请求的URI 路径模式。支持通配符、路径变量。例如"/users""/users/{id}"
methodRequestMethod[]{}限制 HTTP 请求方法(GET, POST, PUT, DELETE…)。若不指定,则匹配所有 HTTP 方法。
paramsString[]{}限制请求参数条件。要求请求必须包含/不包含某些参数,或参数值等于/不等于某个值。例如"version=2""!draft"
headersString[]{}限制 HTTP 请求头条件。语法与params类似,例如"X-Requested-With=XMLHttpRequest"
consumesString[]{}限制请求的媒体类型(即Content-Type头)。仅当客户端发送的Content-Type匹配时才会匹配,否则返回 415。例如"application/json"
producesString[]{}限制响应的媒体类型(通过Accept头协商)。若客户端Accept不匹配则返回 406,同时会设置响应Content-Type。例如"application/json"

注:valuepath通过@AliasFor互称为别名,因此两者等价;若都不指定,则默认映射到类或方法所在路径的相对路径(例如类上@RequestMapping("/api"),方法上无路径,则方法映射到/api)。


二、@PostMapping@GetMapping等是如何派生出来的?

Spring 提供了多个组合注解(Composed Annotation),每个都固定了method属性,并继承了@RequestMapping的所有其他能力。例如:

java

@RequestMapping(method = RequestMethod.GET) public @interface GetMapping { // 通过 @AliasFor 将属性桥接到 @RequestMapping }
注解固定 method等价写法
@GetMappingRequestMethod.GET@RequestMapping(method = GET)
@PostMappingRequestMethod.POST@RequestMapping(method = POST)
@PutMappingRequestMethod.PUT@RequestMapping(method = PUT)
@DeleteMappingRequestMethod.DELETE@RequestMapping(method = DELETE)
@PatchMappingRequestMethod.PATCH@RequestMapping(method = PATCH)

以你给出的@PostMapping源码为例:

java

@RequestMapping(method = {RequestMethod.POST}) // 元标注,固定为 POST public @interface PostMapping { @AliasFor(annotation = RequestMapping.class) String name() default ""; @AliasFor(annotation = RequestMapping.class) String[] value() default {}; @AliasFor(annotation = RequestMapping.class) String[] path() default {}; // ... 其他属性同样通过 @AliasFor 桥接到 @RequestMapping }
  • 开发者使用@PostMapping时,无需再写method = POST

  • 所有@AliasFor声明的属性,最终会“传值”给元注解@RequestMapping的同名属性。

  • 因此@PostMapping("/user")等价于@RequestMapping(value = "/user", method = POST)

为什么需要这些派生注解?

  1. 简化:减少重复编写method = …

  2. 语义清晰:注解名称直接表达了 HTTP 方法。

  3. 便于静态检查:IDE 或代码扫描工具可以更准确地识别 HTTP 操作。


三、实际使用对照示例

使用@RequestMapping(完整写法)

java

@RestController public class UserController { @RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json") public User create(@RequestBody User user) { ... } }

等价的@PostMapping写法

java

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

同时使用类级别 + 方法级别

java

@RequestMapping("/api/v1") // 类前缀 @RestController public class UserController { @PostMapping("/users") // 实际路径 = /api/v1/users public User create(...) { ... } }

四、总结表:@RequestMappingvs 派生注解

注解是否固定method主要用途
@RequestMapping否(默认匹配所有)通用映射,或需要动态方法(如自定义条件)
@GetMapping是(GET)查询、获取资源
@PostMapping是(POST)创建资源
@PutMapping是(PUT)整体更新资源
@DeleteMapping是(DELETE)删除资源
@PatchMapping是(PATCH)部分更新资源

记住:所有派生注解本质上都是@RequestMapping的“特化版本”,它们共享相同的路径匹配、参数、头、媒体类型等约束能力,但强制了一类 HTTP 方法。在日常开发中,为了代码简洁和语义清晰,推荐优先使用@GetMapping@PostMapping等具体注解,仅在需要非常规方法(如OPTIONSTRACE)或动态方法时再直接使用@RequestMapping

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 20:10:22

【AHC】AHC 如何处理连接失败(如 Connection refused)?是否会自动重试?

async-http-client 连接失败处理全解析:Connection refused 背后的自动重试陷阱与生产级容错设计 发布时间:2026年02月08日 作者:九师兄 一、问题引入:从 Kafka Connect 雪崩看默认重试的致命缺陷 在构建高可用异步 HTTP 客户端系统时,连接失败(如 java.net.ConnectEx…

作者头像 李华
网站建设 2026/4/27 20:09:55

PCB智慧农业大棚

一、原理图1.1 电源上电与枚举电路通过 USB1 连接电脑后,CH340E 芯片获得 5V 供电。电脑识别到 CH340E 芯片后,会自动加载驱动(或手动安装),在设备管理器中生成一个虚拟串口(如 COM3、COM4)。数…

作者头像 李华
网站建设 2026/4/27 20:07:45

QQ-Groups-Spider:5分钟掌握高效QQ群数据采集的实用工具

QQ-Groups-Spider:5分钟掌握高效QQ群数据采集的实用工具 【免费下载链接】QQ-Groups-Spider QQ Groups Spider(QQ 群爬虫) 项目地址: https://gitcode.com/gh_mirrors/qq/QQ-Groups-Spider 还在为获取精准的QQ群信息而烦恼吗&#xff…

作者头像 李华
网站建设 2026/4/27 20:07:29

【泰凌微(Telink)实战 - 01】开发环境搭建全攻略

今天整理一篇从零到一的完整攻略,覆盖Windows环境下IDE安装、SDK导入、编译、烧录、调试全流程,适配TLSR8258/8259/8359等主流型号,新手可直接照做,避免走弯路! 本文核心亮点: ✅ 全程图文级步骤&#xf…

作者头像 李华
网站建设 2026/4/27 20:07:20

软件连续性管理中的灾难恢复演练

软件连续性管理中的灾难恢复演练:保障业务永续的关键实践 在数字化时代,软件系统的连续性直接关系到企业的生存与发展。无论是自然灾害、硬件故障还是网络攻击,任何意外中断都可能导致巨额损失。灾难恢复演练作为软件连续性管理的核心环节&a…

作者头像 李华
网站建设 2026/4/27 20:02:27

AI驱动的SEO关键词优化全新方法与案例分享

在当前快速变化的数字营销环境中,AI技术为SEO关键词优化提供了新的思路。通过智能算法,营销人员能够更有效地发掘用户需求,识别出有潜力的关键词。与传统方法不同,AI可以实时分析大量数据,帮助优化关键词选择和布局&am…

作者头像 李华