【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;}@Overridepublic 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;}

⭕总结

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

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

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

相关文章

2024年阿里云优惠券(代金券)在哪里领取?

阿里云作为国内领先的云计算服务提供商&#xff0c;不仅提供了稳定、高效的云服务&#xff0c;还时常推出各种优惠活动&#xff0c;以此来吸引用户上云。其中&#xff0c;阿里云优惠券就是一种常见的优惠方式。那么&#xff0c;在2024年&#xff0c;我们该如何领取阿里云优惠券…

动态规划:背包问题合集

01背包 定义dp[i][j]&#xff1a;在前i件物品中选出若干件&#xff0c;放入容量为j的背包&#xff0c;能获得的最大价值。 考虑第i件物品拿还是不拿。讨论c[i]与背包容量的关系&#xff1a; &#xff08;1&#xff09;j < c[i] 时&#xff0c;背包容量为j&#xff0c;而第…

基于java+springboot+vue实现的教学辅助系统(文末源码+Lw)23-225

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…

ics-05-攻防世界

题目 点了半天只有设备维护中心能进去 御剑扫一下 找到一个css 没什么用 再点击云平台设备维护中心url发生了变化 设备维护中心http://61.147.171.105:65103/index.php?pageindex试一下php伪协议 php://filter/readconvert.base64-encode/resourceindex.php base64解一下…

LLM-base版本和chat版本的比较

突然想到了这个问题&#xff0c;网上搜集了一些资料&#xff0c;自己也总结一下 首先放一张llama2论文当中的图&#xff0c;可以很直观的看到区别 面试回答版 问题&#xff1a; 大语言模型base版和chat版的区别是什么&#xff1f; 回答&#xff1a; base版本更适合文本补全…

TechTool Pro for Mac v19.0.3中文激活版 硬件监测和系统维护工具

TechTool Pro for Mac是一款专为Mac用户设计的强大系统维护和故障排除工具。它凭借全面的功能、高效的性能以及友好的操作界面&#xff0c;赢得了广大用户的信赖和好评。 软件下载&#xff1a;TechTool Pro for Mac v19.0.3中文激活版 作为一款专业的磁盘和系统维护工具&#x…

huawei 华为交换机 配置 VLAN 聚合示例

组网需求 某公司拥有多个部门且位于同一网段&#xff0c;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN 中&#xff0c;如 图 5-7 所示&#xff0c; VLAN2 和 VLAN3 属于不同部门。各部门均有访问Internet需求&#xff0c;同时由于业务需要&#xff0c;不同部…

Docker 安装RabbitMQ以及使用客户端图形化界面

目录 一、点击进入docker 镜像仓库 1.1 直接在官网里 搜索 rabbitmq 1.2 在标签里 直接搜索3.10-management 因为这个标签包含用户操作界面 二、启动docker 2.1 首先拉取镜像&#xff1a; 2.2 Docker运行&#xff0c;并设置开机自启动 三、访问用户操作界面 一、点击进入…

耐腐蚀耐高温实验室塑料烧杯进口高纯PFA材质反应器特氟龙烧杯

PFA烧杯在实验过程中可作为储酸容器或涉及强酸强碱类实验的反应容器&#xff0c;用于盛放样品、试剂&#xff0c;可搭配电热板加热、蒸煮、赶酸用。 外壁均有凸起刻度&#xff0c;直筒设计&#xff0c;带翻边&#xff0c;便于夹持和移动&#xff0c;边沿有嘴&#xff0c;便于倾…

基于单片机放大电路程控放大特性参数设计

**单片机设计介绍&#xff0c;基于单片机放大电路程控放大特性参数设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机放大电路程控放大特性参数设计是一个结合了单片机编程和放大电路技术的综合性项目。以下是对该设计项目的概…

高效解决Ubuntu Server 18.04.1 LTS 64bit更新gdb8.1.1到gdb12.1

文章目录 问题解决步骤 问题 因为需要用到gdb一些指令&#xff0c;但是gdb8.x好像存在普遍的问题&#xff0c;实现不了某些指令&#xff0c;比方说set detach-on-fork on&#xff0c;升级版本也没有比较好的教程 经过我不断的试错&#xff0c;我终于升级成功了&#xff01;&a…

创建型模式--5.建造者模式【卡雷拉公司】

1. 造船&#xff0c;我是专业的 在海贼世界中&#xff0c;水之都拥有全世界最好的造船技术&#xff0c;三大古代兵器之一的冥王就是由岛上的造船技师们制造出来的。现在岛上最大、最优秀的造船公司就是卡雷拉公司&#xff0c;它的老板还是水之都的市长&#xff0c;财富权力他都…