SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数

以下是主要的注解及其用法:


1. @RequestParam

用于获取查询参数(URL 参数),适用于 GET 请求或 POST 表单提交。

@GetMapping("/user")
public String getUser(@RequestParam("id") Long userId) {return "User ID: " + userId;
}// 可选参数,设置默认值
@GetMapping("/search")
public String search(@RequestParam(value = "q", required = false, defaultValue = "") String query) {return "Search: " + query;
}

2. @PathVariable

用于获取 URL 路径中的变量。

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long userId) {return "User ID: " + userId;
}// 当变量名与方法参数名相同时可省略
@GetMapping("/article/{slug}")
public String getArticle(@PathVariable String slug) {return "Article: " + slug;
}

3. @RequestBody

用于获取请求体中的 JSON/XML 数据,通常用于 POST/PUT 请求。

@PostMapping("/user")
public String createUser(@RequestBody User user) {return "Created user: " + user.getName();
}

4. @RequestHeader

用于获取 HTTP 请求头中的值。

@GetMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {return "User Agent: " + userAgent;
}

5. @CookieValue

用于获取 HTTP 请求中的 Cookie 值。

@GetMapping("/home")
public String home(@CookieValue("JSESSIONID") String sessionId) {return "Session ID: " + sessionId;
}

6. @ModelAttribute

用于绑定请求参数到模型对象,适用于表单提交。

@PostMapping("/register")
public String register(@ModelAttribute User user) {return "Registered: " + user.getName();
}

7. @RequestPart

用于处理 multipart/form-data 请求中的文件上传。

@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) {return "Uploaded: " + file.getOriginalFilename();
}

8. 直接使用 Servlet API

SpringBoot 也支持直接使用 Servlet API 对象:

@GetMapping("/example")
public String example(HttpServletRequest request, HttpServletResponse response) {String param = request.getParameter("param");return "Parameter: " + param;
}

9. 获取所有参数

@RequestParam Map 获取所有查询参数

@GetMapping("/params")
public String getAllParams(@RequestParam Map<String, String> allParams) {return "All params: " + allParams.toString();
}

@RequestParam MultiValueMap 获取可能有多个值的参数

@GetMapping("/multiParams")
public String getMultiParams(@RequestParam MultiValueMap<String, String> params) {return "Multi params: " + params.toString();
}

10. 参数绑定到对象

SpringBoot 支持自动将请求参数绑定到 Java 对象:

@GetMapping("/filter")
public String filterUsers(UserFilter filter) {return "Filtering by: " + filter.toString();
}// UserFilter 类示例
public class UserFilter {private String name;private Integer age;// getters and setters
}

注意事项

请求示例:/filter?name=John&age=25

  1. 大多数注解都有 required 和 defaultValue 属性可以配置

  2. 对于复杂嵌套对象,SpringBoot 也能自动绑定

  3. 参数名称默认会与方法参数名匹配,除非在注解中指定

  4. 可以通过配置 spring.mvc.hiddenmethod.filter.enabled=true 来支持 PUT/DELETE 等方法的表单提交

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

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

相关文章

【Linux篇章】Socket 套接字,竟让 UDP 网络通信如此丝滑,成为一招致胜的秘籍!

本篇文章将带大家了解网络通信是如何进行的&#xff08;如包括网络字节序&#xff0c;端口号&#xff0c;协议等&#xff09; &#xff1b;再对socket套接字进行介绍&#xff1b;以及一些udp-socket相关网络通信接口的介绍及使用&#xff1b;最后进行对基于udp的网络通信&#…

GIF图像格式

你可能已经知道&#xff0c;GIF 是一种光栅图像文件格式&#xff0c;它在不损失图像质量的前提下提供压缩功能&#xff0c;并且支持动画和透明度。 GIF 是“Graphics Interchange Format&#xff08;图形交换格式&#xff09;”的缩写。由于其良好的兼容性以及在不同应用程序和…

D3.js的力导向图使用入门笔记

D3.js是一个用于数据可视化的JavaScript库,广泛应用于Web端的数据交互式图形展示 中文文档&#xff1a;入门 | D3 中文网 一、D3.js核心特点 1、核心思想 将数据绑定到DOM元素&#xff0c;通过数据动态生成/修改可视化图形。 2、应用场景 交互式图表&#xff1a;如动态条…

Zookeeper的分布式事务与原子性:深入解析与实践指南

引言在分布式系统架构中&#xff0c;事务管理和原子性保证一直是极具挑战性的核心问题。作为分布式协调服务的标杆&#xff0c;Apache Zookeeper提供了一套独特而强大的机制来处理分布式环境下的原子操作。本文将深入探讨Zookeeper如何实现分布式事务的原子性保证&#xff0c;分…

Lua(迭代器)

Lua 迭代器基础概念Lua 迭代器是一种允许遍历集合&#xff08;如数组、表&#xff09;元素的机制。迭代器通常由两个部分组成&#xff1a;迭代函数和状态控制变量。每次调用迭代函数会返回集合中的下一个元素。泛型 for 循环Lua 提供了泛型 for 循环来简化迭代器的使用。语法如…

发布 VS Code 扩展的流程:以颜色主题为例

发布 VS Code 扩展的流程&#xff1a;以颜色主题为例 引言&#xff1a;您的 VS Code 扩展在市场中的旅程 Visual Studio Code (VS Code) 的强大扩展性是其广受欢迎的核心原因之一&#xff0c;它允许开发者通过添加语言支持、调试器和各种开发工具来定制和增强其集成开发环境&…

C++ 多线程(一)

C 多线程&#xff08;一&#xff09;1.std中的thread API 介绍开启一个线程获取线程信息API交换两个线程2.向线程里传递参数的方法第一种方式&#xff08;在创建线程的构造函数后携带参数&#xff09;第二种方式&#xff08;Lambda&#xff09;第三种方式&#xff08;成员函数&…

自动驾驶训练-tub详解

在 Donkeycar 的环境里&#xff0c;“tub” 是一个很关键的术语&#xff0c;它代表的是存储训练数据的目录。这些数据主要来源于自动驾驶模型训练期间收集的图像和控制指令。 Tub 的构成 一个标准的 tub 目录包含以下两类文件&#xff1a; JSON 记录文件&#xff1a;其命名格式…

CVPR多模态破题密钥:跨模对齐,信息串供

关注gongzhonghao【CVPR顶会精选】当今数字化时代&#xff0c;多模态技术正迅速改变我们与信息互动的方式。多模态被定义为在特定语境中多种符号资源的共存与协同。这种技术通过整合不同模态的数据&#xff0c;如文本、图像、音频等&#xff0c;为用户提供更丰富、更自然的交互…

小米路由器3G R3G 刷入Breed和OpenWrt 插入可共享网络的usb随身WiFi

小米 R3G 参数&#xff08;以下加黑加粗需要特别关注&#xff0c;灰常详细&#xff09; 市面上有R3G和R3Gv2两种型号, 注意区分, 后者是缩水版, 没有USB口. 内存只有128M, Flash只有16M. 这里描述的只适用于R3G. 就是这样 操作步骤开始&#xff0c;&#xff0c;注&#xff1a…

SpringBoot实现Serverless:手撸一个本地函数计算引擎

前言 最近突然冒出一个想法&#xff1a;能不能用SpringBoot自己实现一个类似AWS Lambda或阿里云函数计算的执行引擎&#xff1f; 说干就干&#xff0c;于是从零开始设计了一套基于SpringBoot的Serverless执行框架。 这套框架支持函数动态加载、按需执行、资源隔离&#xff0c;甚…

Java排序算法之<插入排序>

目录 1、插入排序 2、流程介绍 3、java实现 4、性能介绍 前言 在 Java 中&#xff0c; 冒泡排序&#xff08;Bubble Sort&#xff09; 和 选择排序&#xff08;Selection Sort&#xff09; 之后&#xff0c;下一个性能更好的排序算法通常是 插入排序&#xff08;Insertion …

《计算机网络》实验报告七 HTTP协议分析与测量

目 录 1、实验目的 2、实验环境 3、实验内容 4、实验结果与分析 4.1 使用tcpdump命令抓包 4.2 HTTP字段分析 5、实验小结 5.1 问题与解决办法&#xff1a; 5.2 心得体会&#xff1a; 1、实验目的 1、了解HTTP协议及其报文结构 2、了解HTTP操作过程&#xff1a;TCP三次…

面试实战,问题十三,Redis在Java项目中的作用及使用场景详解,怎么回答

Redis在Java项目中的作用及使用场景详解&#xff08;面试要点&#xff09; 一、Redis的核心作用高性能缓存层 原理&#xff1a;Redis基于内存操作&#xff08;引用[2]&#xff09;&#xff0c;采用单线程模型避免线程切换开销&#xff0c;配合IO多路复用实现高吞吐&#xff08;…

Python - 100天从新手到大师 - Day6

引言 这里主要是依托于 jackfrued 仓库 Python-100-Days 进行学习&#xff0c;记录自己的学习过程和心得体会。 1 文件读写和异常处理 实际开发中常常会遇到对数据进行持久化的场景&#xff0c;所谓持久化是指将数据从无法长久保存数据的存储介质&#xff08;通常是内存&…

IP--MGER综合实验报告

一、实验目的完成网络设备&#xff08;路由器 R1-R5、PC1-PC4&#xff09;的 IP 地址规划与配置&#xff0c;确保接口通信基础正常。配置链路层协议及认证&#xff1a;R1 与 R5 采用 PPP 的 PAP 认证&#xff08;R5 为主认证方&#xff09;&#xff0c;R2 与 R5 采用 PPP 的 CH…

window的WSL怎么一键重置

之前用WSL来在windows和服务器之间传输数据&#xff0c;所以有很多数据缓存&#xff0c;但是现在找不到他们的路径&#xff0c;所以想直接重置 首先使用spacesniffer看一下C盘的情况&#xff1a;看起来&#xff0c;这个WSL真的占用了很多空间&#xff0c;但是我又不知道该怎么删…

卷积神经网络研讨

卷积操作原理: 特征向量与遍历:假设已知特征向量(如蓝天白云、绿油油草地特征),在输入图像的各个区域进行遍历,通过计算内积判断该区域是否有想要的特征。 内积计算特征:内积为 0 表示两个向量垂直,关系不好,无想要的特征;夹角越小,内积越大,代表区域中有想要的特征…

【EWARM】EWARM(IAR)的安装过程以及GD32的IAR工程模板搭建

一、简介 IAR官网 EWARM&#xff0c;即 IAR Embedded Workbench for ARM&#xff0c;是由 IAR Systems 开发的一款专门用于 ARM 微处理器软件开发的集成开发环境。以下是具体介绍&#xff1a; 功能特性&#xff1a; 完整工具链支持&#xff1a;集成了高级编辑器、全面的编译…

【工程化】浅谈前端构建工具

一、前端构建工具概述​ 前端构建工具是辅助开发者将源代码转换为浏览器可直接运行的静态资源的工具集合。随着前端技术的发展&#xff0c;源代码往往包含浏览器无法直接解析的语法&#xff08;如 TypeScript、Sass&#xff09;、模块化规范&#xff08;如 ES Modules、Common…