作者简介

作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!

测试工具 IDEA、postman

一、@RequestParam

针对QueryString参数传递,在请求URL中直接拼接请求参数,如URL?param1=value1& param2=value2

  1. 传递基本类型参数

在接收的方法中用@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;
}

  1. 传递对象类型参数

定义一个对象,属性名称和前端传递的参数名称一致即可

 @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();
}

  1. 传递数组、集合类型
  • 数组

拼接多个参数名称一样的参数即可,如URL?param=value1&param=value2&param=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指名对应路径参数的参数名

  1. 传递基本类型参数
 @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;
}

  1. 传递数组、集合类型
  • 数组
@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();
}

测试的注意点

  1. 用post
  2. 用Body的form-data
  3. 参数类型选择File 而不是默认的Text

三、@RequestBody

针对body表单传参,RequestBody只能有一个

  1. 传递基本类型参数
@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传参详解相关推荐

  1. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    看这边文章时的疑惑是:WebApi中的参数加了[FromBody],不知所以然,就百度了下,看到了以下文章,和大家分享下: 原文链接:http://www.cnblogs.com/landeanfen ...

  2. python可变参数_Python 的四种共享传参详解

    点击上方"Python数据之道",选择"星标公众号" 精品文章,第一时间送达 作者 | 杨仁聪 编辑 | Lemon 出品 | Python数据之道 本文来自公 ...

  3. WebApi 接口参数不再困惑:传参详解

    阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4."怪异"的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4 ...

  4. 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解

    阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4."怪异"的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4 ...

  5. Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)

    (接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...

  6. Vue路由传参详解(params 与 query)

    Vue路由传参详解(params 与 query) 前言: 路由传参分为 params 传参与 query 传参 params 传参类似于网络请求中的 post 请求,params 传过去的参数不会显 ...

  7. uboot引导kernel - 3 -uboot给内核传参详解

    uboot中执行theKernel函数后,kernel正式启动.如下函数,我们发现有3个参数. 1. 参数 0: 2. 参数machid; 如下code 中获取machid, gd是个全局变量. 2. ...

  8. C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数

    文章目录 3.1 传递临时对象作为线程参数 3.1.1 要避免的陷阱(解释1) 3.1.2 要避免的陷阱(解释2) 3.1.3 总结 3.2 临时对象作为线程参数进一步详解 3.2.1 线程id概念 ...

  9. 微信小程序生命周期和路由传参详解

    一.生命周期 1.应用级的生命周期 1.onLaunch 当小程序初始化完成时,会触发onLaunch(全局只触发一次) 2.onShow 当小程序启动,或从后台进入前台显示,会触发onShow 3. ...

最新文章

  1. php高版本不再使用mysql_connect()来连接数据库
  2. Shiro结合Redis解决集群中session同步问题
  3. PXC DDL 操作阻塞写
  4. 关于SAP Spartacus Routing 页面上下文切换机制的实现
  5. Redis入门(一)之安装
  6. linux脚本vrrp_script,keepalived 的 vrrp_script
  7. 同步机制之--java之CountDownLatch闭锁
  8. 华为堡垒机_浪潮无线分析,华为云堡垒机
  9. 【laravel5.6】 laravel 接口 接管 自定义异常类
  10. Could not find artifact com.taotao:taotao-parent:pom原因
  11. python wx包_python的wxpython包
  12. QProcess 使用
  13. C# 抖音无水印视频下载教程,教你你如何抓取抖音无水印接口
  14. SPSS入门教程——合并文件添加变量匹配数据的方法
  15. Ubuntu 软件包管理 常用 apt 命令
  16. 工业相机和镜头基础知识(转载)
  17. 扁平化easyUI default皮肤
  18. 说一下HashMap的实现原理?
  19. 2018.8.盛夏,
  20. Matlab中meshgrid的用法

热门文章

  1. go 实现post请求
  2. 【评论生成】AI生成评论,如何既相关又多样?
  3. MySQL应用之CROSS JOIN用法(有时挺管用)
  4. 工商银行APP流水申请
  5. 关于 python 的缩进
  6. 面试必学JVM面试题(附答案)
  7. python控制小车前进_基于图像处理和tensorflow实现GTA5的车辆自动驾驶——第四节通过Python控制人物前进后退...
  8. EXCEL 打开较大的文件很慢
  9. Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)
  10. Kettle使用统一的数据库配置