Springboot传参详解
作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
测试工具 IDEA、postman
一、@RequestParam
针对QueryString参数传递,在请求URL中直接拼接请求参数,如URL?param1=value1& param2=value2
- 传递基本类型参数
在接收的方法中用@RequestParam注解修饰,指定前端传递的参数名称
@RequestMapping("QueryStringTest1")
public String QueryStringTest1(@RequestParam("id") String id,@RequestParam("name") String name){return "id is "+ id+",name is "+ name;
}
Postman 中调用
如果传递的参数和接收的参数名一致,甚至可以省略相关配置
- 省略1
@RequestParam(“id”) 中的参数名id被省略
@RequestMapping("QueryStringTest2")
public String QueryStringTest2(@RequestParam String id,@RequestParam String name){return "id is "+ id+",name is "+ name;
}
注意:因为有RequestParam注解的存在,所以传参必须包含所有使用RequestParam注解的接收参数,否则会报错(允许传空,但是必须包含参数);
可以使用@RequestParam(value = “id”,required = false) 的方式,让id未传也可以。
- 省略2
@RequestParam 注解直接被省略
@RequestMapping("QueryStringTest3")
public String QueryStringTest3(String id, String name){return "id is "+ id+",name is "+ name;
}
允许其中的参数不传,不会报错,但取值为null,比如name不传
传参和入参名不一样的情况
@RequestMapping("QueryStringTest4")
public String QueryStringTest4(@RequestParam("id") String myId,@RequestParam("name") String myName){return "myId is "+ myId+",myName is "+ myName;
}
- 传递对象类型参数
定义一个对象,属性名称和前端传递的参数名称一致即可
@RequestMapping("objectTest1")public String objectTest1(User user){return "user.id is "+ user.getId()+",user.name is "+ user.getName();}
未传的属性值为null
加上注解@RequestParam,会怎么样呢? 会报错,不要这样用
@RequestMapping("objectTest3")
public String objectTest3(@RequestParam User user){return "user.id is "+ user.getId()+",user.name is "+ user.getName();
}
- 传递数组、集合类型
- 数组
拼接多个参数名称一样的参数即可,如URL?param=value1¶m=value2¶m=value3
@RequestMapping("arrayTest1")
public String[] arrayTest1(@RequestParam String[] name){for (String temp:name){System.out.println(temp);}return name;
}
对同一个参数赋多个值,多个值之间用,隔开,如URL?param=value1,value2,value3
- 集合
只举例List,其他类似
@RequestMapping("listTest1")
public List listTest1(@RequestParam List name){for(int i=0;i<name.size();i++){System.out.println("list name==="+name.get(i));}return name;
}
二、@PathVariable
路径传参方式是将参数直接包含在URL路径中,比如URL/paramValue1/paramValue2
在接口对应的请求路径中用{参数名}形式标出路径参数
在接口方法的参数上标注@PathVariable指名对应路径参数的参数名
- 传递基本类型参数
@RequestMapping("pathTest1/{id}/{name}")public String pathTest1(@PathVariable("id") String id, @PathVariable("name") String name){return "id is "+ id+",name is "+ name;}
能省略这个注解吗?我的结论是不可以,请看下面
@RequestMapping("pathTest2/{id}/{name}")
public String pathTest2(String id,String name){return "id is "+ id+",name is "+ name;
}
- 传递数组、集合类型
- 数组
@RequestMapping("pathArrayTest1/{name}")
public String[] pathArrayTest1(@PathVariable("name") String[] names){for (String name:names){System.out.println("array name:"+name);}return names;
}
- 集合
@RequestMapping("pathListTest1/{name}")
public List pathListTest1(@PathVariable("name") List names) {for (int i=0;i<names.size();i++) {System.out.println("list name:" + names.get(i));}return names;
}
- 文件
// MultipartFile接收
@PostMapping("upload")
public String uploadFile(@RequestParam("file") MultipartFile myFile){return "type:"+myFile.getContentType()+" fileName:"+myFile.getOriginalFilename()+" size:"+myFile.getSize();
}
测试的注意点
- 用post
- 用Body的form-data
- 参数类型选择File 而不是默认的Text
三、@RequestBody
针对body表单传参,RequestBody只能有一个
- 传递基本类型参数
@RequestMapping("bodyTest1")
public String bodyTest1(@RequestBody String name){return "name is:"+name;
}
2. 传递对象类型参数
比如User 对象
@RequestMapping("bodyTest2")
public String bodyTest2(@RequestBody User user){return "name is:"+user.getName() + " age is:"+user.getAge();
}
3. 传递数组、集合类型
- 数组
@RequestMapping("bodyTest3")
public String bodyTest3(@RequestBody String[] users){return Arrays.asList(users).toString();
}
- 集合
User对象
@RequestMapping("bodyTest4")
public String bodyTest4(@RequestBody List<User> users){return users.toString();
}
String类型
@RequestMapping("bodyTest5")
public String bodyTest5(@RequestBody List<String> users){return users.toString();
}
*Json对象
添加依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version>
</dependency>
后端代码
@RequestMapping("bodyTest6")
public String bodyTest6(@RequestBody JSONObject user){return "name is :"+user.get("name")+" age is :"+user.get("age");
}
四、HttpServletRequest
明哥以前经常用
@RequestMapping("httpRequest")
public String httpRequest(HttpServletRequest request){return "name is :"+request.getParameter("name")+" age is :"+request.getParameter("age");
}
或者
五、@PathVariable+@RequestParam混合
@RequestMapping("pathAndParam/{id}")
public String pathAndParam(@PathVariable("id") String id, @RequestParam("name") String name){return "id is "+ id+",name is "+ name;
}
六、@PathVariable+@RequestBody混合
@RequestMapping("pathAndBody/{id}")
public String pathAndBody(@PathVariable("id") String id, @RequestBody User user){return "id is "+ id+",name is "+ user.getName();
}
七、无注解传参
@RequestMapping("other")
public String other(User user){return "name is:"+user.getName() + " age is:"+user.getAge();
}
小结
这节总结了“ Springboot传参详解 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】, 如果有兴趣跟小明哥一起学习Java和前端的,【关注一波】不迷路哦。
请到文章下方帮忙【一键三连】谢谢哈!
热门专栏推荐
【1】Java小游戏(俄罗斯方块、飞机大战、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、在线考试、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、贪吃蛇、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】Idea从零到精通
Springboot传参详解相关推荐
- C#进阶系列——WebApi 接口参数不再困惑:传参详解
看这边文章时的疑惑是:WebApi中的参数加了[FromBody],不知所以然,就百度了下,看到了以下文章,和大家分享下: 原文链接:http://www.cnblogs.com/landeanfen ...
- python可变参数_Python 的四种共享传参详解
点击上方"Python数据之道",选择"星标公众号" 精品文章,第一时间送达 作者 | 杨仁聪 编辑 | Lemon 出品 | Python数据之道 本文来自公 ...
- WebApi 接口参数不再困惑:传参详解
阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4."怪异"的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4 ...
- 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解
阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4."怪异"的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4 ...
- Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)
(接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...
- Vue路由传参详解(params 与 query)
Vue路由传参详解(params 与 query) 前言: 路由传参分为 params 传参与 query 传参 params 传参类似于网络请求中的 post 请求,params 传过去的参数不会显 ...
- uboot引导kernel - 3 -uboot给内核传参详解
uboot中执行theKernel函数后,kernel正式启动.如下函数,我们发现有3个参数. 1. 参数 0: 2. 参数machid; 如下code 中获取machid, gd是个全局变量. 2. ...
- C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数
文章目录 3.1 传递临时对象作为线程参数 3.1.1 要避免的陷阱(解释1) 3.1.2 要避免的陷阱(解释2) 3.1.3 总结 3.2 临时对象作为线程参数进一步详解 3.2.1 线程id概念 ...
- 微信小程序生命周期和路由传参详解
一.生命周期 1.应用级的生命周期 1.onLaunch 当小程序初始化完成时,会触发onLaunch(全局只触发一次) 2.onShow 当小程序启动,或从后台进入前台显示,会触发onShow 3. ...
最新文章
- php高版本不再使用mysql_connect()来连接数据库
- Shiro结合Redis解决集群中session同步问题
- PXC DDL 操作阻塞写
- 关于SAP Spartacus Routing 页面上下文切换机制的实现
- Redis入门(一)之安装
- linux脚本vrrp_script,keepalived 的 vrrp_script
- 同步机制之--java之CountDownLatch闭锁
- 华为堡垒机_浪潮无线分析,华为云堡垒机
- 【laravel5.6】 laravel 接口 接管 自定义异常类
- Could not find artifact com.taotao:taotao-parent:pom原因
- python wx包_python的wxpython包
- QProcess 使用
- C# 抖音无水印视频下载教程,教你你如何抓取抖音无水印接口
- SPSS入门教程——合并文件添加变量匹配数据的方法
- Ubuntu 软件包管理 常用 apt 命令
- 工业相机和镜头基础知识(转载)
- 扁平化easyUI default皮肤
- 说一下HashMap的实现原理?
- 2018.8.盛夏,
- Matlab中meshgrid的用法
热门文章
- go 实现post请求
- 【评论生成】AI生成评论,如何既相关又多样?
- MySQL应用之CROSS JOIN用法(有时挺管用)
- 工商银行APP流水申请
- 关于 python 的缩进
- 面试必学JVM面试题(附答案)
- python控制小车前进_基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第四节通过Python控制人物前进后退...
- EXCEL 打开较大的文件很慢
- Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)
- Kettle使用统一的数据库配置