Springboot中Controller接收参数的方式

news2025/6/5 17:50:33

  在Spring Boot中,@Controller@RestController可以通过多种方式接收客户端传递的参数,主要包括以下几种常见方式:


1. 接收路径参数(@PathVariable

从URL路径中提取参数,适用于RESTful风格的API。

示例

@RestController
@RequestMapping("/user")
public class UserController {

    // 示例URL: /user/123
    @GetMapping("/{id}")
    public String getUserById(@PathVariable Long id) {
        return "User ID: " + id;
    }

    // 多个路径变量
    @GetMapping("/{name}/{age}")
    public String getUserInfo(
            @PathVariable String name,
            @PathVariable int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

2. 接收查询参数(@RequestParam

从URL的?key=value格式中获取参数,适用于GET请求。

示例

@RestController
@RequestMapping("/search")
public class SearchController {

    // 示例URL: /search?keyword=spring
    @GetMapping
    public String search(@RequestParam String keyword) {
        return "Searching for: " + keyword;
    }

    // 可选参数(默认值)
    @GetMapping("/optional")
    public String searchOptional(
            @RequestParam(required = false, defaultValue = "default") String keyword) {
        return "Keyword: " + keyword;
    }

    // 接收多个参数
    @GetMapping("/multi")
    public String multiParams(
            @RequestParam String name,
            @RequestParam int age) {
        return "Name: " + name + ", Age: " + age;
    }
}

3. 接收表单数据(@ModelAttribute

适用于HTML表单提交(POST请求),自动绑定到Java对象。

示例

@RestController
@RequestMapping("/form")
public class FormController {

    // 接收表单数据并绑定到User对象
    @PostMapping("/submit")
    public String submitForm(@ModelAttribute User user) {
        return "Submitted: " + user.getName() + ", " + user.getAge();
    }
}

// User.java
public class User {
    private String name;
    private int age;
    // getters & setters
}

4. 接收JSON请求体(@RequestBody

适用于POST/PUT请求,接收JSON格式数据并自动映射到Java对象。

示例

@RestController
@RequestMapping("/api")
public class ApiController {

    // 接收JSON数据并映射到User对象
    @PostMapping("/create")
    public String createUser(@RequestBody User user) {
        return "Created: " + user.getName() + ", " + user.getAge();
    }
}

请求示例(POST /api/create

{
    "name": "Alice",
    "age": 25
}

5. 接收HTTP请求头(@RequestHeader

获取HTTP请求头信息,如AuthorizationContent-Type等。

示例

@RestController
@RequestMapping("/header")
public class HeaderController {

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

6. 接收Cookie(@CookieValue

获取客户端发送的Cookie值。

示例

@RestController
@RequestMapping("/cookie")
public class CookieController {

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

7. 接收文件上传(MultipartFile

适用于文件上传(如<input type="file">)。

示例

@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping("/file")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        return "File uploaded: " + file.getOriginalFilename() + ", Size: " + file.getSize();
    }
}

总结

方式适用场景注解示例
路径参数RESTful API(如/user/{id}@PathVariable/user/123id=123
查询参数GET请求(?key=value@RequestParam/search?q=spring
表单数据HTML表单提交(POST)@ModelAttribute<form>User对象
JSON请求体POST/PUT请求(JSON数据)@RequestBody{"name": "Alice"}
HTTP请求头获取请求头信息@RequestHeaderAuthorization: Bearer xxx
Cookie获取Cookie值@CookieValueJSESSIONID=xxx
文件上传文件上传(<input type="file">MultipartFile上传图片/文档

最佳实践

  • RESTful API:优先使用 @PathVariable + @RequestBody
  • 表单提交:使用 @ModelAttribute@RequestParam
  • 文件上传:使用 MultipartFile
  • 复杂参数:使用 @RequestBody 接收JSON数据。

掌握这些方式后,可以灵活处理各种HTTP请求参数! 🚀

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

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

相关文章

Unity UI 性能优化终极指南 — Image篇

&#x1f3af; Unity UI 性能优化终极指南 — Image篇 &#x1f9e9; Image 是什么&#xff1f; Image 是UGUI中最常用的基本绘制组件支持显示 Sprite&#xff0c;可以用于背景、按钮图标、装饰等是UI性能瓶颈的头号来源之一&#xff0c;直接影响Draw Call和Overdraw &#x1…

Nginx + Tomcat 负载均衡、动静分离群集

一、 nginx 简介 Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在 BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xff0c;在同类型的网页服务器中表现优异&#xff0c;常用…

c++ algorithm

cheatsheet&#xff1a;https://hackingcpp.com transform 元素变换 https://blog.csdn.net/qq_44961737/article/details/146011174 #include <iostream> #include <vector> #include <algorithm>int main() {std::vector<int> a {1, 2, 3, 4, 5};…

安全-JAVA开发-第一天

目标&#xff1a; 安装环境 了解基础架构 了解代码执行顺序 与数据库进行连接 准备&#xff1a; 安装 下载IDEA并下载tomcat&#xff08;后续出教程&#xff09; 之后新建项目 注意点如下 1.应用程序服务器选择Web开发 2.新建Tomcat的服务器配置文件 并使用 Hello…

6月2日上午思维训练题解

好好反思一下&#xff0c;自己在学什么&#xff0c;自己怎么在做训练赛的&#xff0c;真有这么难吗 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; A - Need More Arrays 题解 想尽可能多的拆出新数组的个数&#xff0c;只需要从原本的数组中提取出最长的一…

【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)

D. Cyclic Operations 题目&#xff1a; 思路&#xff1a; 非常好的一题 对于这题我们要学会转换和提取条件&#xff0c;从特殊到一般 我们可以考虑特殊情况先&#xff0c;即 k n 和 k 1时&#xff0c;对于 k 1&#xff0c;我们可以显然发现必须满足 b[i] i&#xff0c;而…

前端八股之Vue

目录 有使用过vue吗&#xff1f;说说你对vue的理解 你对SPA单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f;如何实现SPA应用呢 一、SPA 是什么 二、SPA 和 MPA 的区别 三、SPA 的优缺点 四、实现 SPA 五、给 SPA 做 SEO 的方式&#xff08;基于 Vue&#xff…

谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航

谷歌地图高清卫星地图2024中文版是一款非常专业的世界地图查看工具。通过使用该软件&#xff0c;你就可以在这里看到外太空星系、大洋峡谷等场景&#xff0c;通过高清的卫星地图&#xff0c;可以清晰查看地图、地形、3D建筑、卫星图像等信息&#xff0c;让你可以更轻松的探索世…

条形进度条

组件 <template><view class"pk-detail-con"><i class"lightning" :style"{ left: line % }"></i><i class"acimgs" :style"{ left: line % }"></i><view class"progress&quo…

IBM DB2分布式数据库架构

一、什么是分布式数据库架构 分布式数据库架构是现代数据库系统的重要发展方向&#xff0c;特别适合处理大规模数据、高并发访问和高可用性需求的应用场景。下面我们从原理、架构模式、关键技术、实现方式和常见产品几个方面来系统讲 1、分布式数据库的基本概念与原理 1. 什…

Android Studio 向模拟器手机添加照片、视频、音乐

Android Studio 向模拟器手机添加照片、视频、音乐(其实都是一样的&#xff0c;只是添加到不同的文件夹&#xff09;&#xff0c;例如我们在很多程序中功能例如&#xff1a;选择头像&#xff0c;跳转到手机相册选择头像&#xff0c;此时相册为空&#xff0c;即模拟器没有图片资…

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察

作者&#xff1a;来自 Elastic Luca Wintergerst ES|QL 的 LOOKUP JOIN 现已进入技术预览阶段&#xff0c;它允许你在查询时对日志、指标和追踪进行丰富处理&#xff0c;无需在摄取时进行非规范化。动态添加部署、基础设施或业务上下文&#xff0c;减少存储占用&#xff0c;加速…

Flask + Celery 应用

目录 Flask Celery 应用项目结构1. 创建app.py2. 创建tasks.py3. 创建celery_worker.py4. 创建templates目录和index.html运行应用测试文件 Flask Celery 应用 对于Flask与Celery结合的例子&#xff0c;需要创建几个文件。首先安装必要的依赖&#xff1a; pip install flas…

奥威BI+AI数据分析:企业数智化转型的加速器

在当今数据驱动的时代&#xff0c;企业对于数据分析的需求日益增长。奥威BIAI数据分析的组合&#xff0c;正成为众多企业数智化转型的加速器。 奥威BI以其强大的数据处理和可视化能力著称。它能够轻松接入多种数据源&#xff0c;实现数据的快速整合与清洗。通过内置的ETL工具&…

python打卡day43

复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 找了个街头食物图像分类的数据集Popular Street Foods&#xff08;其实写代码的时候就开始后悔了&#xff09;&#xff0c;原因在于&…

Linux --进程优先级

概念 什么是进程优先级&#xff0c;为什么需要进程优先级&#xff0c;怎么做到进程优先级这是本文需要解释清楚的。 优先级的本质其实就是排队&#xff0c;为了去争夺有限的资源&#xff0c;比如cpu的调度。cpu资源分配的先后性就是指进程的优先级。优先级高的进程有优先执行的…

安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言 昨天更新了四篇博客&#xff0c;我们顺利的 安装了 ubuntu server 服务器&#xff0c;并且配置好了 ssh 免密登录服务器&#xff0c;安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs&#xff0c;还有PNPM包管理工具 。 作为服务器的运行…

图解gpt之注意力机制原理与应用

大家有没有注意到&#xff0c;当序列变长时&#xff0c;比如翻译一篇长文章&#xff0c;或者处理一个长句子&#xff0c;RNN这种编码器就有点力不从心了。它把整个序列信息压缩到一个固定大小的向量里&#xff0c;信息丢失严重&#xff0c;而且很难记住前面的细节&#xff0c;特…

【Oracle】视图

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 视图基础概述1.1 视图的概念与特点1.2 视图的工作原理1.3 视图的分类 2. 简单视图2.1 创建简单视图2.1.1 基本简单视图2.1.2 带计算列的简单视图 2.2 简单视图的DML操作2.2.1 通过视图进行INSERT操作2.2.2 通…