当前位置: 首页 > news >正文

Spring Boot 请求参数接收控制指南

Spring Boot 请求参数接收控制指南

1. 概述

在Spring Boot项目中,我们可以通过不同的注解来接收来自HTTP请求的各种参数。本指南将详细介绍各种参数接收方式及其使用场景。

2. 有注解时参数接收方式对比

参数类型注解位置适用HTTP方法示例
路径参数@PathVariableURL路径中GET, DELETE/users/{id}
查询参数@RequestParamURL?后GET/users?name=John
请求体@RequestBody请求体POST, PUT, PATCHJSON/XML数据
请求头@RequestHeaderHTTP头任意Authorization: Bearer token
Cookie值@CookieValueCookie头任意Cookie: JSESSIONID=xxx
表单数据@RequestParam表单体POSTapplication/x-www-form-urlencoded
文件上传@RequestParammultipart/form-dataPOST文件上传表单

3. 无注解时接收参数默认位置

Spring Boot 默认参数绑定规则(不加注解时)

请求类型参数类型默认绑定位置示例注意事项
GET基本类型/String自动绑定到URL查询参数GET /user?name=Tompublic String getUser(String name)参数名必须与URL中的key一致
POJO对象自动绑定到URL查询参数GET /user?name=Tom&age=20public String getUser(User user)对象的字段名需与URL参数匹配
数组/集合自动绑定到URL查询参数GET /user?ids=1,2,3public String getUser(List<Integer> ids)支持逗号分隔或同名参数(ids=1&ids=2
POST基本类型/String表单数据 (Form Data)POST /user (Content-Type: application/x-www-form-urlencoded)需设置Content-Type为表单类型
POJO对象表单数据JSON请求体若为application/json → 绑定到请求体;若为表单 → 按字段名匹配需明确指定Content-Type,否则可能解析失败
数组/集合表单数据或JSON请求体同POJO规则表单格式需用同名参数(names=Tom&names=Jerry
MultipartFile文件上传 (multipart)POST /upload (enctype="multipart/form-data")必须设置enctype="multipart/form-data"
PUT/PATCH所有类型JSON/XML请求体PUT /user { "name": "Tom" }public String updateUser(User user)默认按@RequestBody处理,需显式加注解才能覆盖
DELETE基本类型/StringURL查询参数DELETE /user?id=123public String deleteUser(Long id)与GET相同
POJO对象不支持-DELETE通常只用路径参数或简单查询参数

关键规则总结

  1. GET/DELETE 请求
    • 参数默认绑定到 URL查询字符串?key=value)。
    • POJO对象会按字段名自动拆解到查询参数。
  2. POST 请求
    • 默认按 表单数据application/x-www-form-urlencoded)解析。
    • 若请求头为 Content-Type: application/json,则需显式加 @RequestBody,否则绑定失败。
  3. PUT/PATCH 请求
    • 默认按请求体(JSON/XML)处理,类似@RequestBody行为,但实际开发中建议显式加注解。
  4. 特殊类型
    • MultipartFile:仅在 multipart/form-data 类型的POST中自动绑定。
    • 数组/集合:支持URL查询参数(GET)或表单同名参数(POST)。

常见误区澄清

  1. 表单数据不会放在请求头
    • 请求头仅用于元数据(如Content-TypeAuthorization等),表单内容一定在请求体。
  2. GET请求能否带表单数据?
    • ❌ 不能。GET请求的参数只能通过URL查询字符串(?key=value)传递,且长度受限。
  3. 不加注解时Spring Boot如何绑定表单数据?
    • 默认按参数名匹配请求体中的表单字段(需参数名与表单字段名一致)。
  4. POST JSON vs 表单数据
    • JSON数据必须显式使用@RequestBody,而表单数据默认绑定(无需注解)。

4.HTTP请求参数位置自定义控制对照表

参数位置Spring Boot注解手动提取方式适用场景示例请求
URL路径参数@PathVariableHttpServletRequest.getRequestURI()RESTful资源标识GET /users/123id=123
URL查询参数@RequestParamrequest.getParameter("name")过滤条件、分页GET /users?name=Tomname=Tom
请求头@RequestHeaderrequest.getHeader("Authorization")认证令牌、客户端信息Header: Authorization: Bearer xxx
请求体(JSON)@RequestBodyInputStream + JSON解析库复杂数据提交POST /users + {"name":"Tom"}
请求体(表单)@RequestParamrequest.getParameterMap()传统表单提交POST /login + username=Tom&password=123
请求体(文件)@RequestPartMultipartHttpServletRequest文件上传POST /upload + multipart/form-data
Cookie@CookieValuerequest.getCookies()会话管理Cookie: sessionId=abc123

相关文章:

  • Python爬虫第18节-动态渲染页面抓取之Splash使用上篇
  • 武装Burp Suite工具:xia SQL自动化测试_插件
  • SQLMesh 通知系统深度解析:构建自动化监控体系
  • 机器学习基础 - 分类模型之朴素贝叶斯
  • 26-算法打卡-字符串-右旋字符串-第二十六天
  • 基于Quill的文档编辑器开发日志(上)——前端核心功能实现与本地存储管理
  • 【Unity笔记】Unity音效管理:ScriptableObject配置 + 音量控制 + 编辑器预览播放自动化实现
  • Science Robotics 新型层级化架构实现250个机器人智能组队,“单点故障”系统仍可稳定运行
  • 主流开源 LLM 应用开发平台详解
  • 店匠科技摘得 36 氪“2025 AI Partner 创新大奖”
  • 《楞严经》中“魔”与魔王波旬的关联性分析
  • 数据分析:用Excel做周报
  • uniapp中使用<cover-view>标签
  • 国内ip地址怎么改?详细教程
  • Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南
  • Zookeeper是什么?基于zookeeper实现分布式锁
  • UML设计系列(9):开发过程中如何应用UML
  • MATLAB 下载安装教程
  • C# 文件读取
  • Elasticsearch 堆内存使用情况和 JVM 垃圾回收
  • 基辅响起密集爆炸声,乌方称俄军发动大规模导弹袭击
  • 建行原副行长章更生被开除党籍:靠贷吃贷,大搞权钱交易
  • 中国驻日本大使馆发言人就日方涉靖国神社消极动向答记者问
  • 中国与柬埔寨签署多领域合作文件
  • 委托第三方可一次性补缴十多万元的多年社保?广州多人涉嫌被骗后报警
  • 大理杨徐邱上诉案开庭:当事人称曾接受过两次测谎测试