@RequestParam 注解详解

@RequestParam 是 Spring MVC 中最常用的注解之一,用于从 HTTP 请求中提取查询参数(Query String)或表单数据。它主要处理 application/x-www-form-urlencoded 类型的请求(如 GET 请求或 POST 表单提交)。


一、核心作用
  1. 参数绑定
    将请求中的参数值绑定到控制器方法的参数上。

    // 示例:获取请求中的 `name` 参数
    @GetMapping("/user")
    public String getUser(@RequestParam String name) {return "User: " + name;
    }
    
    • 访问 /user?name=Alice → 输出 User: Alice
  2. 处理可选参数
    通过 required 属性控制参数是否必须。

    @GetMapping("/search")
    public String search(@RequestParam(required = false) String keyword) {return keyword != null ? "Results for: " + keyword : "All items";
    }
    
    • 访问 /search → 输出 All items
    • 访问 /search?keyword=spring → 输出 Results for: spring

二、关键属性
属性说明默认值
value / name指定请求参数的名称方法参数名
required参数是否必须true (必须)
defaultValue参数缺失时的默认值
示例:
@PostMapping("/register")
public String register(@RequestParam("username") String user,  // 绑定到"username"参数@RequestParam(name = "age", defaultValue = "18") int age, // 缺省时默认为18@RequestParam(required = false) String hobby // 可选参数
) {// 业务逻辑
}

三、使用场景
  1. 获取单个参数

    @GetMapping("/detail")
    public String detail(@RequestParam Long id) { ... }
    
  2. 获取多个同名参数(如复选框)

    @PostMapping("/submit")
    public String submit(@RequestParam List<String> interests) {// interests 接收如 ?interests=music&interests=sports 的值
    }
    
  3. 映射到 Map 对象

    @GetMapping("/filters")
    public String applyFilters(@RequestParam Map<String, String> filters) {// 接收所有参数,如 ?category=books&price=100
    }
    

四、注意事项
  1. 参数名匹配规则

    • 默认根据方法参数名匹配请求参数(需编译时开启 -parameters 或显式指定 @RequestParam("param"))。
    • 若参数名未指定且编译未保留参数名,会抛出 MissingServletRequestParameterException
  2. 类型转换
    Spring 自动将 String 类型的参数转为目标类型(如 int, LocalDate 等)。

    • 转换失败 → 抛出 TypeMismatchException
  3. @PathVariable 区别

    特性@RequestParam@PathVariable
    来源查询字符串(?key=valueURL 路径(/users/{id}
    是否可选可通过 required=false 设为可选通常是必须的
    示例/api?page=1/api/users/123
  4. @RequestBody 区别

    • @RequestParam:处理 URL 编码数据(简单键值对)。
    • @RequestBody:处理 JSON/XML 等复杂数据(如 POST 请求体)。

五、常见问题解决方案
  1. 参数缺失异常

    // 方案1: 设置 required=false
    @RequestParam(required = false) String param// 方案2: 提供默认值
    @RequestParam(defaultValue = "default") String param
    
  2. 参数名冲突
    显式指定参数名避免歧义:

    public String query(@RequestParam("from") Date startDate,  // 使用"from"作为参数名@RequestParam("to") Date endDate
    ) { ... }
    
  3. 接收数组/列表

    // 前端传参: ?ids=1,2,3 或 ?ids=1&ids=2
    public String getItems(@RequestParam List<Long> ids) { ... }
    

六、最佳实践
  1. 简单查询:优先用 @RequestParam 处理过滤条件(如分页、排序)。
  2. RESTful 路径:资源标识用 @PathVariable(如 /users/{id}),附加参数用 @RequestParam(如 /users?role=admin)。
  3. 明确命名:避免依赖编译参数名,显式声明 @RequestParam("paramName")
  4. 设置默认值:对分页参数等推荐使用 defaultValue
    @GetMapping("/posts")
    public Page<Post> getPosts(@RequestParam(defaultValue = "0") int page,@RequestParam(defaultValue = "10") int size
    ) { ... }
    

总结@RequestParam 是 Spring 中处理请求参数的基石级注解,适用于大多数简单数据绑定场景。掌握其用法能高效处理 URL 编码数据,但复杂 JSON 数据应使用 @RequestBody

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

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

相关文章

从零掌握XML与DTD实体:原理、XXE漏洞攻防

本文仅用于技术研究&#xff0c;禁止用于非法用途。 Author:枷锁 文章目录一、XML基础1. 什么是XML&#xff1f;2. XML语法规则3. 数据类型二、DTD1. 认识DTD2. 声明DTD3. DTD实体4. 如何防御XXE攻击&#xff1f;5. 总结一、XML基础 1. 什么是XML&#xff1f; XML &#xff1…

.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!

.NET 8 Release Candidate 1 (RC1)发布&#xff1a;ASP.NET Core重大改进来袭&#xff01; 近日&#xff0c;.NET 8 Release Candidate 1 (RC1)正式发布&#xff0c;这是在今年晚些时候计划发布的最终 .NET 8 版本之前的两个候选版本中的第一个。此版本包含了大部分计划中的功…

Jenkins pipeline 部署docker通用模板

Jenkinsfile: Docker的NETWORK_NAME不要使用bridge默认网络&#xff0c;要使用自定义的网络如test默认 bridge 网络&#xff1a;容器间不能用名字互相访问&#xff0c;只能用 IP。自定义网络&#xff1a;容器间可以用名字互相访问&#xff0c;Docker 自动做了 DNS 解析。pipeli…

【每日算法】专题十五_BFS 解决 FloodFill 算法

1. 算法思想 Flood Fill 问题的核心需求 给定一个二维网格&#xff08;如像素矩阵&#xff09;、一个起始坐标 (x, y) 和目标颜色 newColor&#xff0c;要求&#xff1a; 将起始点 (x, y) 的颜色替换为 newColor。递归地将所有与起始点相邻&#xff08;上下左右&#xff09; …

ESLint 完整功能介绍和完整使用示例演示

以下是ESLint的完整功能介绍和完整使用示例演示&#xff1a; ESLint 完整功能介绍 一、核心功能静态代码分析&#xff1a; 通过解析JavaScript/TypeScript代码为抽象语法树&#xff08;AST&#xff09;&#xff0c;识别语法错误、潜在问题&#xff08;如未定义变量、未使用变量…

解决问题七大步骤

发现问题后寻找解决方案的流程可以细化为 7个核心步骤&#xff0c;每个步骤包含具体措施、信息源和关键技巧&#xff0c;形成“从自查到验证、从独立解决到寻求帮助”的完整闭环。以下是完善后的流程&#xff1a; 一、明确问题与初步自查&#xff08;前提&#xff1a;减少无效搜…

思维链(CoT)技术全景:原理、实现与前沿应用深度解析

一、核心概念与原理 定义与起源 CoT 是一种引导大语言模型&#xff08;LLM&#xff09;显式生成中间推理步骤的技术&#xff0c;通过模拟人类逐步解决问题的过程&#xff0c;提升复杂任务&#xff08;如数学证明、多步逻辑推理&#xff09;的准确性。该概念由 Google Brain 团…

实验-华为综合

华为综合实验 一 实验拓扑二 实验配置交换机2 vlan batch 10 20 int e0/0/2 port link-type access port default vlan 10 int e0/0/1 port link-type access port default vlan 20 int e0/0/3 port link-type trunk port trunk allow-pass vlan alltelnet交换机3 链路类型配置…

Matlab打开慢、加载慢的解决办法

安装完毕后直接打开会非常慢&#xff0c;而且打开了之后还得加载很久才能运行 解决办法如下&#xff1a; 1.找到路径“D:\Program Files\Polyspace\R2020a\licenses”&#xff08;我是把matlab安装在D盘了&#xff0c;如果是其他盘修改路径即可&#xff09;&#xff0c;该路径记…

混沌趋势指标原理及交易展示

1. 引言在金融市场交易中&#xff0c;尤其是加密货币合约交易&#xff0c;趋势跟踪是最主流的策略之一。然而&#xff0c;传统趋势指标如均线、MACD等存在明显的滞后性&#xff0c;往往在趋势确立后才发出信号&#xff0c;导致交易者错失最佳入场时机。更糟糕的是&#xff0c;市…

Java面试宝典:Maven

一、Maven的本质与核心价值 项目管理革命 POM驱动:通过pom.xml文件定义项目结构、依赖、构建规则,实现标准化管理()。示例配置: <dependencies> <dependency> <groupId>org.springframework

可靠消息最终一致性分布式事务解决方案

之前文章写过主流的一些 分布式事务的解决方案&#xff0c;但其实工作中很少有一些高并发的业务中去使用这些方案&#xff0c;因为对于高并发的场景来说&#xff0c;引入这些方案的性能损耗太大&#xff0c;且对系统事务侵入性太强影响系统稳定性。 所以在高并发的业务中&…

ISIS基础

拓扑计算方式 模型 支持的网络 支持的地址OSPF SPF TCP/IP IP网络 IPv4地址ISIS SPF OSI CLNP网络 NSAP地址集成ISIS SPF TCP/IP IP网络 NSAP地址&#xff0c;但可以支持IPv4地址12. …

基于ASP.NET+SQL Server实现(Web)排球赛事网站

排球赛事网的设计与实现摘要随着近几年来计算机技术、网络技术及相应软件技术的迅猛发展&#xff0c;人们的生活已越来越离不开计算机了&#xff0c;而且总是要花费很多时间在它上面。一直以来&#xff0c;排球作为一项大众喜爱的运动&#xff0c;得到广泛传播。随着各项排球赛…

【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果&#xff0c;输出该树的前序遍历结果。 输入格式: 第一行给出正整数 n (≤30)&#xff0c;是树中结点的个数。随后两行&#xff0c;每行给出…

Java HashMap高频面试题深度解析

在 Java 面试中&#xff0c;HashMap 是必问的核心知识点&#xff0c;以下是高频问题和深度解析框架&#xff0c;助你系统性掌握&#xff1a;一、基础概念HashMap 的本质是什么&#xff1f; 基于哈希表的 Map 接口实现&#xff0c;存储键值对&#xff08;Key-Value&#xff09;非…

GitHub Pages无法访问以点号.开头的目录

目录 前言 Jekyll 是什么 启用访问 总结 前言 一些前端项目经常会使用GitHub Pages进行部署展示&#xff0c;但是GitHub Pages 使用的是 Jekyll 引擎&#xff0c;对 Jekyll 引擎不熟悉的小伙伴就会出现如文章标题所言的情况。 Jekyll 是什么 Jekyll 是 GitHub Pages 默认…

JS JSON.stringify介绍(JS序列化、JSON字符串 )(遍历输入值的所有可枚举属性,将其转换为文本表示)缓存序列化、状态管理与时间旅行、replacer

文章目录JSON.stringify 全解析1. 基本概念2. 序列化原理1. 对于原始类型&#xff0c;直接转换为对应的字符串表示2. 对于对象和数组&#xff0c;递归处理其每个属性或元素3. 应用特殊规则处理日期、函数、Symbol 等特殊类型4. 检测并防止循环引用5. 应用 replacer 函数或数组进…

SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战

关键词&#xff1a; SQLite、LiteDB、VACUUM、WAL、auto_vacuum、文件瘦身、数据库维护在嵌入式或桌面、IoT 网关等场景&#xff0c;很多同学都会选择单文件数据库&#xff08;SQLite、LiteDB、SQL CE…&#xff09;。 最近群里一位朋友反馈&#xff1a;“我的 test.db 已经把业…

如何加固Web服务器的安全?

Web服务器是用户和公司联系的桥梁&#xff0c;Web服务器为用户交付网页内容和提供Web应用。正因为Web服务器是面向互联网的&#xff0c;所以成为了网络的攻击经常利用的一个入口。Web 服务器是企业数字化转型的 “前沿阵地”&#xff0c;其安全性不仅关乎技术层面的稳定运行&am…