当前位置: 首页 > news >正文

SpringBoot接收参数的几种形式

SpringBoot接收参数的几种形式

在SpringBoot中获取参数基本方式有5种,需要都掌握.

这里需要记住一个技术术语或概念

API接口: 你写好的那个URL地址,就被称为API接口

1. 接收常规参数

给/param/demo1这个URL接口发送id, name两个参数
在这里插入图片描述
以上是以GET请求类型进行发送,实际发送的请求如下:
在这里插入图片描述

在SpringBoot端,我们可以直接在处理请求的那个方法形参上,写上和请求参数同名的形参名称即可

获取到的id和name参数:

 @RequestMapping("/param/demo1")public void demo1(int id, String name){System.out.println("获取到的参数是:");System.out.println("id:" + id);System.out.println("name:" + name);}

如果发送的是POST类型的请求,需要注意:POST请求的参数是放在请求体中提交给服务器端的.
在这里插入图片描述

我们接收的时候,也可以使用普通方法直接接收:

// 接收POST方式提交过来的数据@RequestMapping("/param/demo2")public void demo2(String gender, String name){System.out.println("获取到的数据是:");System.out.println("name = " + name);System.out.println("gender = " + gender);}

注意点,接收参数的时候,不一定非要和提交过来的参数顺序一致,只需要名称对应上即可.

如果提交的参数名称和接收的名称不一致,可以使用@RequestParam注解进行参数映射
在这里插入图片描述

 // 接收POST方式提交过来的数据@RequestMapping("/param/demo2")public void demo2(@RequestParam("xingbie") String gender, String name){System.out.println("获取到的数据是:");System.out.println("name = " + name);System.out.println("gender = " + gender);}

2. 使用POJO接收参数

如果需要同时接收一批数据,而不想通过普通方式一个个接收,就可以使用POJO对象的方式来获取提交过来的所有数据

只需要POJO对象的属性名和提交过来的参数一一对应上就可以了

比如如果想接收name, age, school, gender这些参数

在这里插入图片描述
写一个POJO,属性和提交过来的参数可以对应的上, 注意,一定要有getter/setter方法

 @Datapublic class People {private String name;private int age;private String school;private String gender;}//如果同时提交过来一批数据(比如说10来个数据,我们要在形参中写上一堆参数吗?)
//如果同时提交过来的参数过多,我们可以考虑使用POJO方式接收
// Plain Old Java Object @RequestMapping("/param/demo3") public void demo3(People people){ System.out.println("接收到的数据是:"); System.out.println(people); }

如果前端提交过来的数据是一个嵌套的数据,如何接收?

此时就需要使用嵌套的POJO来接收:

在这里插入图片描述

@Data public class Address { private String sheng; private String shi; private String xian; }
@Datapublic class Teacher { private String name; private int age; private Address address;}
//接收嵌套的参数@RequestMapping("/param/demo4")public void demo4(Teacher teacher){System.out.println("接收到的数据是:");System.out.println(teacher);// 要获取所在的市String shi = teacher.getAddress().getShi();System.out.println("所在市:" + shi);}

3. 接收数组或列表类型的数据

使用数组接收数据
在这里插入图片描述

 // 接收数组数据
@RequestMapping("/param/demo5")
public void demo5(String[] likes){System.out.println("接收到的数据是:");System.out.println(Arrays.toString(likes));}

使用集合接收数据,此时需要使用@RequestParam注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@RequestMapping("/param/demo7")
public void demo7(@RequestParam List<String> likes){System.out.println("接收到的数据是:");System.out.println(likes);}

4. 接收JSON类型的数据

JSON是什么

JSON是一种轻量级的数据交换格式,易于人阅读和编写,可以在多种语言之间进行数据交换

JSON数据的常用结构
  1. JSON对象
{ "name": "刘旭超", "age": 36,  "likes": ["打游戏", "看电影"] }
  1. JSON数组
[100, 200, 300]["aaa", "bbb", "ccc"]
  1. JSON对象数组
[ { "name": "刘旭超",  "age": 36 },  { "name": "刘二超",  "age": 36 },  { "name": "刘小超",  "age": 36 } 
]
SpringBoot端接收JSON类型的数据

注意: 要接收JSON类型的数据,在SpringBoot的方法参数中一定要使用@RequestBody注解才可以

  1. 接收JSON对象

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SpringBoot端需要先定义一个POJO:

比如定义一个People类,People类的属性一一的和JSON的数据对应上:

@Datapublic class People {private String name;private int age;private String[] likes;}
@RequestMapping("/param/demo8")public void demo8(@RequestBody People people) {System.out.println(people);}
  1. 接收JSON数组

假如有以下JSON数组:

在这里插入图片描述

SpringBoot端使用@RequestBody注解,参数类型使用的数组或列表集合直接接收即可:

// 使用数组接收
@RequestMapping("/param/demo9")
public void demo8(@RequestBody Integer[] numbers) {System.out.println(Arrays.toString(numbers));
}
// 使用列表集合接收
@RequestMapping("/param/demo9")
public void demo8(@RequestBody List<Integer> numbers) {System.out.println(numbers);
}
  1. 接收对象数组

假如有以下JSON数组:

在这里插入图片描述

JSON对象,即使使用{}包裹的,我们需要使用JAVA对象来做对应, 使用[]包裹的,我们需要使用数组或列表集合来对应

定义一个对象来接收JSON{}里的数据

@Data
public class People {private String name;private int age;
}
@RequestMapping("/param/demo9")
public void demo8(@RequestBody List<People> peopleList) {System.out.println(peopleList);
}

5. 接收日期类型的参数

日期格式的数据,提交给SpringBoot的时候,我们是直接可以使用普通方式接受没有任何问题.

但是如果如上所示,我们使用字符串接收:

@RequestMapping("/param/demo10")
public void demo10(String startDate,String endDate){
// 此时接收到参数以后,startDate和endDate就是一个单纯的字符串,假如我们想使用年、月、日的
//据的时候
// 我们得使用字符串的一些方法来分割或截取才能获取到对应的年、月、日数据String[] dateArray =startDate.split("/");String year = dateArray[0];int yearInt = Interger.parseInt(year);
// 以上操作是不方便的
}

为了方便操作,SpringBoot是可以直接把前端提交过来的日期格式的数据,对应到JAVA的日期类型上,需要使用@DateTimeFormat注解+ Date类型对象来接收:

@RequestMapping("/param/demo10")
public void demo10(@DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate){System.out.println(startDate.getMonth());System.out.println(endDate);
}

的数据,对应到JAVA的日期类型上,需要使用@DateTimeFormat注解+ Date类型对象来接收:

@RequestMapping("/param/demo10")
public void demo10(@DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate){System.out.println(startDate.getMonth());System.out.println(endDate);
}

相关文章:

  • docker (十二)-私有仓库
  • go垃圾回收
  • c++入门(2)
  • 代码随想录算法训练营第四十七天|198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III。
  • VR虚拟现实技术应用到猪抗原体检测的好处
  • 蓝桥杯第十四届电子类单片机组决赛程序设计
  • MySql安全加固:可信IP地址访问控制 设置密码复杂度
  • 蓝桥杯 信号覆盖
  • 安装 git 与查看 version
  • LeetCode #104 二叉树的最大深度
  • 5G网络频谱划分与应用
  • C# 找出两个Rectangle或是矩形的相互重合与非重合部分?
  • 【C语言】常见的动态内存管理错误
  • AI Agent
  • 【Web】get请求和post请求的区别
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript的使用你知道几种?(上)
  • java概述
  • Java教程_软件开发基础
  • Material Design
  • Node + FFmpeg 实现Canvas动画导出视频
  • SSH 免密登录
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 彻底搞懂浏览器Event-loop
  • 大数据与云计算学习:数据分析(二)
  • 回顾2016
  • 如何实现 font-size 的响应式
  • 深入 Nginx 之配置篇
  • 使用putty远程连接linux
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 阿里云ACE认证之理解CDN技术
  • 从如何停掉 Promise 链说起
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (安卓)跳转应用市场APP详情页的方式
  • (七)c52学习之旅-中断
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET和.COM和.CN域名区别
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /bin/rm: 参数列表过长"的解决办法
  • @angular/cli项目构建--Dynamic.Form
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [Android Pro] AndroidX重构和映射
  • [Android]RecyclerView添加HeaderView出现宽度问题
  • [C/C++]数据结构 循环队列
  • [CTF]2022美团CTF WEB WP
  • [ffmpeg] aac 音频编码