【Java EE】Spring请求如何传递参数详解

文章目录

  • 🎍传递单个参数
  • 🌴传递多个参数
  • 🍀传递对象
  • 🎄后端参数重命名(后端参数映射)
  • 🌲传递数组
  • 🎍传递集合
  • 🌴传递JSON数据
    • 🌸JSON概念
    • 🌸JSON的语法
    • 🌸JSON的两种结构
    • 🌸JSON字符串和Java对象互转
    • 🌸JSON的优点
    • 🌸传递JSON对象
  • 🎋获取URL中参数@PathVariable
  • 🍃上传文件@RequestPart
  • 🍀获取Cooki/Session
  • 🎄获取Header
    • 🌸传统获取 header
    • 🌸简洁获取header
  • ⭕总结

访问不同的路径,就是发送不同的请求.在发送请求时,可能会带⼀些参数,所以我们在学习Spring的请求时,主要是学习如何传递参数到后端以及后端如何接收.

下面博主会对传递参数进行一个详解,咱们主要是使⽤浏览器和Postman来模拟

🎍传递单个参数

@RestController
public class hello {
    @RequestMapping("/test")
    public String test(String name){
        return "接受到的参数:"+name;
    }

}

当我们运行后,用浏览器进行访问

http://127.0.0.1:8080/pt/test1?name=山顶是一定要去的

访问结果如下:
在这里插入图片描述
注意:

  • 如果参数名不一致,获取不到参数,默认没有传参,默认值为null

在这里插入图片描述

  • 如果参数类型不⼀致,是会进行报错的
@RestController
public class hello {
    @RequestMapping("/test")
    public String test(Integer name){
        return "接受到的参数:"+name;
    }
}

在这里插入图片描述
注意:

  • 如果使⽤基本类型来接收参数时,参数必须传(除boolean类型),否则会报500错误
@RestController
public class hello {
    @RequestMapping("/test")
    public String test(int name){
        return "接受到的参数:"+name;
    }
}

在这里插入图片描述

日志中也会进行报错。
在这里插入图片描述
建议使用包装类!!!

🌴传递多个参数

与传递单个参数一样

不同的是当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果

🍀传递对象

如果参数⽐较多时,⽅法声明就需要有很多形参.并且后续每次新增⼀个参数,也需要修改⽅法声明.

我们不妨把这些参数封装为⼀个对象.

Spring MVC也可以⾃动实现对象参数的赋值,⽐如Person对象

public class Person {
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

@RequestMapping("test5")
    public String test5(Person person) {
        return "接收到的参数名为:" + person.toString();
    }

在这里插入图片描述
注意

Spring会根据参数名称⾃动绑定到对象的各个属性上,如果某个属性未传递,则赋值为null(基本类型则赋值为默认初识值,⽐如int类型的属性,会被赋值为0)

🎄后端参数重命名(后端参数映射)

某些特殊的情况下,前端传递的参数key和我们后端接收的key可以不⼀致,⽐如前端传递了⼀个time给后端,⽽后端是使⽤createtime字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值.

    @RequestMapping("test6")
    public String test6(@RequestParam("time") String createtime) {
        return "接收到的参数名为:" + createtime;
    }

注意:

  • 使⽤ @RequestParam 进⾏参数重命名时,请求参数只能和@RequestParam 声明的名称⼀致,才能进⾏参数绑定和赋值.
  • 使⽤ @RequestParam 进⾏参数重命名时,参数就变成了必传参数
  • 如果我们不想让他变成必传参数,我们可以通过设置@RequestParam 中的 required=false (默认为true,必传)来避免不传递时报错
    @RequestMapping("test6")
    public String test6(@RequestParam(value = "time",required = false) String createtime) {
        return "接收到的参数名为:" + createtime;
    }

🌲传递数组

Spring MVC 可以⾃动绑定数组参数的赋值

    @RequestMapping("test7")
    public String test7(String[] names) {
        return "接收到的参数名为:" + Arrays.toString(names);
    }

数组传参时,有以下几种:
1:http://127.0.0.1:8080/pt/test7?names=张三&names=李四
2:http://127.0.0.1:8080/pt/test7?names=张三%2c李四
3:http://127.0.0.1:8080/pt/test7?names=张三,李四

🎍传递集合

集合参数:和数组类似,同⼀个请求参数名有为多个

不同的时需要使⽤ @RequestParam 绑定参数关系

传参方式与上述数组传参三种方式一样

@RequestMapping("/m6")
public String method6(@RequestParam List<String> listParam){
	return "size:"+listParam.size() + ",listParam:"+listParam;
}

🌴传递JSON数据

🌸JSON概念

JSON:JavaScript Object Notation【JavaScript对象表⽰法】

JSON是⼀种轻量级的数据交互格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。

简单来说:JSON就是⼀种数据格式,有⾃⼰的格式和语法,使⽤⽂本表⽰⼀个对象或数组的信息,因此JSON本质是字符串.

主要负责在不同的语⾔中数据传递和交换

🌸JSON的语法

  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  5. 值可以为对象,也可以为数组,数组中可以包含多个对象

🌸JSON的两种结构

  1. 对象:⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合.⼀个对象以左括号 { 开始,右括号 }结束。每个"键"后跟⼀个冒号 :
    ,键值对使⽤逗号 , 分隔
  2. 数组: 中括号 [ ] 保存的数组是值(value)的有序集合.⼀个数组以左中括号 [ 开始,右中括号 ] 结束,值之间使⽤逗号 , 分隔。

🌸JSON字符串和Java对象互转

JSON本质上是⼀个字符串,通过⽂本来存储和描述数据

Spring MVC框架也集成了JSON的转换⼯具,我们可以直接使⽤,来完成JSON字符串和Java对象的互转

🌸JSON的优点

  1. 简单易⽤:语法简单,易于理解和编写,可以快速地进⾏数据交换

  2. 跨平台⽀持:JSON可以被多种编程语⾔解析和⽣成,可以在不同的平台和语⾔之间进⾏数据交换和传输

  3. 轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占⽤带宽较⼩,可以提⾼数据传输速度

  4. 易于扩展:JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤

  5. 安全性:JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码,不会执⾏恶意代码,因此具有较⾼的安全性

基于以上特点,JSON在Web应⽤程序中被⼴泛使⽤,如前后端数据交互、API接⼝数据传输等

🌸传递JSON对象

接收JSON对象,需要使⽤ @RequestBody 注解

RequestBody:请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正⽂中

    @RequestMapping("test9")
    public String test9(@RequestBody Person person) {
        return "接收到的参数名为:" + person.toString();
    }

🎋获取URL中参数@PathVariable

path variable:路径变量

和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定

    @RequestMapping("/test10/{id}/{name}")
    public String test10(@PathVariable Integer id, @PathVariable("name") String userName){
        return "解析参数id:"+id+",name:"+userName;
    }

注意:

  • 如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时,可以简写,不⽤给@PathVariable的属性赋值,如上述例⼦中的id变量

  • 如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时,需要@PathVariable的属性value赋值,如上述例⼦中的userName变量

🍃上传文件@RequestPart

代码实现如下:

    @RequestMapping("/test11")
    public String getfile(@RequestPart("file") MultipartFile file) throws IOException {
        //获取⽂件名称
        String fileName = file.getOriginalFilename();
        //⽂件上传到指定路径
        file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));
        return "接收到⽂件名称为: "+fileName;
    }

🍀获取Cooki/Session

由于这部分内容较多,博主单独写了出来。链接如下:

🎄获取Header

🌸传统获取 header

    @RequestMapping("/test17")
    public String test17(HttpServletRequest request, HttpServletResponse response) {
        String userAgent = request.getHeader("User-Agent");
        return  "userAgent:"+userAgent;
    }

🌸简洁获取header

    @RequestMapping("/test18")
    public String test18(@RequestHeader("User-Agent") String userAgent) {
        return "userAgent:"+userAgent;
    }

⭕总结

感谢大家的阅读,希望得到大家的批评指正,和大家一起进步,与君共勉!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习,记录不熟悉知识点

目录 Set&#xff08;集合&#xff09; 集合内置方法完整列表 根据字符串的表达式计算结果 ​编辑 条件控制&#xff1a; if – elif – else match...case 循环语句&#xff1a; while循环 for循环 在同一行中有多个赋值操作&#xff08;先计算&#xff0c;再赋值&…

ThinkPhp8 框架使用 mysql find_in_set 函数

前言: 使用mysql 存储一些标签时 会使用逗号拼接的存储方法 比如 1,2,3,11 一般情况下 查询 1 可能会用到 like %1% 但这样查询的不够准确 因为11也会被查询到 如果每次都多一个逗号 1,2,3,11, 查询时 like %1,% 这样存储有点不太符合程序设计 解决方案 ----------- 官网…

Google Play上架:恶意软件、移动垃圾软件和行为透明度拒审解析(关于对SDK 要求,第三方插件需自查清理混淆)

近期发现很多开发者在上架过程中遇到了 《关于恶意软件、移动垃圾软件和行为透明度》相关的拒审邮件,今天来聊一下关于sdk的政策要求,希望能提供一个自查方向。如有疑问,可以关注博主后私聊进行讨论和咨询。 SDK要求要求如下用户数据政策“敏感信息访问权限和 API”政策“恶…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

mysql 连接查询和子查询

学习了mysql基本查询&#xff0c; 接着学习连接查询和子查询。 4&#xff0c;连接查询 连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询&#xff0c;主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。在关系数据库管理系统中&#xff0c;表建…

rsync实时同步(上行同步)

目录 一、实现实时同步 1. 定期同步的不足 2. 实时同步的优点 3. Linux内核的inotify机制 4. 发起端配置rsyncinotify 4.1 修改rsync源服务器配置文件 4.2 调整inotify内核参数 4.3 安装inotify-tools 4.4 在另一个终端编写触发式同步脚本 4.5 验证 二、使用rsync实现…

直播美颜SDK:AI视觉技术在直播平台中的创新与实践

在直播平台里&#xff0c;主播们通过各种形式的内容吸引着观众&#xff0c;而其中一项重要的技术创新便是直播美颜SDK的应用。本文将探讨这一技术在直播平台中的创新与实践。 一、直播美颜SDK的背景 随着社交媒体的兴起&#xff0c;人们对于自己的形象越来越注重&#xff0c;尤…

【php开发支付宝web支付】

首先介绍下 我用的框架ci 在吐槽下百度的其他人的写的都很垃圾&#xff0c;还不如自己看支付宝的开发手册了 1、composer安装支付宝的sdk composer require alipay/alipay-sdk-php安装完毕 不多哔哔 代码展示 先点地址登录支付宝以后再上我这重点下 支付宝沙箱地址 $ord…

C/C++中局部变量static用法实例

1. 普通局部变量存储于进程栈空间&#xff0c;使用完毕会立即释放&#xff0c;静态局部变量使用static修饰符定义&#xff0c;即使在声明时未赋初值&#xff0c;编译器也会把它初始化为0&#xff0c;并且静态局部变量存储于进程的全局数据区&#xff0c;即使函数返回&#xff0…

企业3D数字化网络展馆成为企业文化传承与发扬的圣地

在河北这片古老而富饶的土地上&#xff0c;文明的火种薪火相传&#xff0c;燕赵之风历久弥新。河北企业也多年持续稳居我国第五的宝座&#xff0c;企业文化展馆不仅是企业形象的展示窗口&#xff0c;更是企业文化传承与发扬的圣地。 与短暂的行业展会不同&#xff0c;企业展馆是…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题

当在Mac上下载的软件显示文件已损坏时&#xff0c;这可能是因为多种原因导致的&#xff0c;包括网络问题、下载中断、软件未完整下载、文件传输错误等。解决这个问题需要采取一些步骤来排除可能的原因&#xff0c;并尝试修复文件。下面将详细介绍一些常见的解决方法&#xff1a…

让WIN7运行WIN10软件的插件

GitHub - vxiiduu/VxKex: Windows 7 API Extensions 安装包才5.23M。 程序 - 属性 - VxKex&#xff1a;勾选 Enable Qt6版的Raptor登录后报错Device offline OpenSCAD的WIN10版

交易要想成功澳福总结几点

100%使用基本面分析的投资者能保证每次交易都能成功吗&#xff1f;100%使用技术分析的投资者能保证每次交易都能成功吗&#xff1f;在fpmarkets澳福看来无论是基本面分析还是技术分析都不能保证100%交易成功。 投资者不能只依赖一种分析进行投资交易。在fpmarkets澳福看来成功的…

vue3中项目优化(Web Worker的使用)

1.Web Worker的作用 本人的理解&#xff1a;js是单线程执行代码&#xff0c;也就是代码需要从上往下执行&#xff0c;而使用Web Worker后相当于分了一条线程出来执行代码&#xff0c;那么两条线程肯定是比一条线程执行的快。 2.新建Web Worker文件 在public文件夹下新建work…

【第二十六篇】Burpsuite实现请求方式修改+请求体文件选取

有时我们想将请求包的请求方法或请求体进行修改,这些操作可以由burpsuite完成,以节省时间。 文章目录 修改请求方法请求体文件选取修改请求方法 例如,某请求包的请求方法为GET: 如果我们想将其修改为POST且传递POST参数、上传文件,可以按以下步骤: 1、修改请求方法 2…

避雷!网络安全学习五大误区,你还不知道?

尽管安全问题老生常谈&#xff0c;但一些普遍存在的误区仍然可能让企业随时陷入危险境地。 为了有效应对当前层出不穷且不断变换的网络威胁&#xff0c;最大程度规避潜在风险&#xff0c;深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案并严格遵守…

LeetCode-热题100:138. 随机链表的复制

题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。…

【数据结构与算法】力扣 142. 环形链表 II

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

倒计时 抢登CCF-C NSPW’24论文战场,4月12日截稿,等你来征服

会议之眼 快讯 2024年NSPW&#xff08;The New Security Paradigms Workshop&#xff09;即新安全范式研讨会将于 2024 年 9月16日-18日在美国宾夕法尼亚州贝德福德举行&#xff01;NSPW是一个专注于信息安全领域的年度会议&#xff0c;该会议旨在为那些挑战计算机安全领域主流…

小小算式(1 + 2) * (3 + 4)背后的大道理

目录 前缀表示法&#xff08;波兰表达式&#xff09; 中缀表达法 后缀表达法&#xff08;逆波兰表达式&#xff09; 三种表达法的相互转换 练习&#xff1a;逆波兰表达式求值 前缀表示法&#xff08;波兰表达式&#xff09; 波兰表示法&#xff08;英语&#xff1a;Polis…