Springboot传参详解

news2024/12/26 11:10:35

作者简介

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

测试工具 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从零到精通
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有关SGI STL的alloc

在STL的使用者层面上&#xff0c;空间配置器一般是隐藏的&#xff0c;使用者不需要知道其具体实现细节即 可进行使用&#xff1b;但是从STL的实现角度来说&#xff0c;由于整个STL的操作对象都存放在容器之内&#xff0c;而容器 需要配置一定的空间来进行存放数据&#xff0c;因…

Mybatis:动态SQL(8)

动态SQL1. 动态sql简介2. if3. where4. trim5. choose、when、otherwise6. foreachforeach实现批量添加foreach实现批量删除7. SQL片段8. 总结1. 动态sql简介 Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句…

I-04Python中与C语言STL部分模板的类似模块

C语言中,我们打ACM可以用<vector>、<stack>等模板来快速实现一些经典的数据结构,可我在很多地方都没找到Python中类似于C里面的STL模板这么好用的东西.于是我在Python的标准库里面总结了些模块来直接实现类似的功能(当然也可能是我真的没找到,如果各位来客有知道的…

【浅学Java】SpringMVC程序开发

SpringMVC程序开发1. 认识SpringMVC1.1 SpringMVC是什么1.2 SpringMVC的定义1.3 MVC和SpringMVC的关系经典问题&#xff1a;Spring / SpringBoot / SpringMVC有什区别2. 学习SpringMVC的思路3. Spring MVC的创建和连接3.0 创建方法3.1 使用到的一些注解3.2 返回一个页面3.3 关于…

Qt实现全局鼠标事件监听器-Windows

Qt实现全局鼠标事件监听器-Windows版&#x1f347; 文章目录Qt实现全局鼠标事件监听器-Windows版&#x1f347;1、概述&#x1f348;2、实现效果&#x1f349;3、实现方式&#x1f34a;4、关键代码&#x1f34b;5、源代码&#x1f34c;更多精彩内容&#x1f449;个人内容分类汇…

Quartz任务调度

Quartz概念 Quartz是openSymphony开源组织在Job scheduling领域的开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合&#xff0c;也可以单独使用。 Quartz是开源且具有丰富特性的“任务调度库”&#xff0c;能够集成于任何的Java应用&#xff0c;小到独立的应用&#xf…

支持向量机SVM

文章目录SVM简单理解SVM代码实现导入数据集SVM实现画出支持向量总结SVM简单理解 在下二维平面存在以下数据点&#xff0c;不同颜色代表不同类别&#xff0c;现在需要画一条直线&#xff0c;想将两个类别分别开来&#xff0c;当有新数据加入时&#xff0c;根据这条直线&#xf…

springboot+jsp母婴用品商城网站系统

开发语言&#xff1a;Java 后端框架&#xff1a;springboot(SpringSpringMVCMyBatis) 前端框架&#xff1a;jsp 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 母婴用品网站&#xff0…

客快物流大数据项目(九十六):ClickHouse的VersionedCollapsingMergeTree深入了解

文章目录 ClickHouse的VersionedCollapsingMergeTree深入了解 一、创建VersionedCollapsingMergeTree引擎表的语法 二、折叠数据

人工智能轨道交通行业周刊-第26期(2022.12.5-12.11)

本期关键词&#xff1a;智慧检修、障碍物检测、监管数据平台、ChatGPT、脑机接口、图像增强 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁…

Canvas 性能优化:脏矩形渲染

大家好&#xff0c;我是前端西瓜哥。 使用 Canvas 做图形编辑器时&#xff0c;我们需要自己维护自己的图形树&#xff0c;来保存图形的信息&#xff0c;并定义元素之间的关系。 我们改变画布中的某个图形&#xff0c;去更新画布&#xff0c;最简单的是清空画布&#xff0c;然…

Java项目:SSM个人博客管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能&#xff1a; 发博客,审核评论,博客增删改查,博客类别增删改查,修改导航,评论增删改查,个人信息修改,登陆页面等功能。 …

TOOD: Task-aligned One-stage Object Detection 原理与代码解析

paper&#xff1a;TOOD: Task-aligned One-stage Object Detection code&#xff1a;https://github.com/fcjian/TOOD 存在的问题 目标检测包括分类和定位两个子任务&#xff0c;分类任务学习的特征主要关注物体的关键或显著区域&#xff0c;而定位任务是为了精确定位整个…

SpringBoot yaml语法详解

SpringBoot yaml语法详解1.yaml基本语法2.yaml给属性赋值3.JSR303校验4.SpringBoot的多环境配置1.yaml基本语法 通常情况下&#xff0c;Spring Boot 在启动时会将 resources 目录下的 application.properties 或 apllication.yaml 作为其默认配置文件&#xff0c;我们可以在该…

【云原生 | Kubernetes 实战】11、K8s 控制器 Deployment 入门到企业实战应用(下)

目录 四、通过 k8s 实现滚动更新 4.3 自定义滚动更新策略 取值范围 建议配置 总结 测试&#xff1a;自定义策略 重建式更新&#xff1a;Recreate 五、生产环境如何实现蓝绿部署&#xff1f; 5.1 什么是蓝绿部署&#xff1f; 5.2 蓝绿部署的优势和缺点 优点&#x…

图数据库 Neo4j 学习之JAVA-API操作

Neo4j 系列 1、图数据库 Neo4j 学习随笔之基础认识 2、图数据库 Neo4j 学习随笔之核心内容 3、图数据库 Neo4j 学习随笔之基础操作 4、图数据库 Neo4j 学习随笔之高级操作 5、图数据库 Neo4j 学习之JAVA-API操作 6、图数据库 Neo4j 学习之SpringBoot整合 文章目录Neo4j 系列前…

mac pro M1(ARM)安装vmware虚拟机及centos8详细教程

前言 mac发布了m1芯片&#xff0c;其强悍的性能收到很多开发者的追捧&#xff0c;但是也因为其架构的更换&#xff0c;导致很多软件或环境的安装成了问题&#xff0c;这次我们接着来看如何在mac m1环境下安装centos8 Centos8安装安装vmware虚拟机Centos8 镜像支持M1芯片安装Cen…

DDPM原理与代码剖析

前言 鸽了好久没更了&#xff0c;主要是刚入学学业压力还蛮大&#xff0c;挺忙的&#xff0c;没时间总结啥东西。 接下来就要好好搞科研啦。先来学习一篇diffusion的经典之作Denoising Diffusion Probabilistic Models(DDPM)。 先不断前向加高斯噪声&#xff0c;这一步骤称为…

论文笔记(二十三):Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo

Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo文章概括摘要1. 介绍2. 背景3. MuJoCo MPC (MJPC)3.1. 物理模拟3.2. 目标3.3. 样条3.4. 规划师4. 结论4.1. 图形用户界面4.2. 例子5. 讨论5.1. 预测抽样5.2. 用例5.3. 局限和未来的工作文章概括 作者&#xff…

25-Vue之ECharts-基本使用

ECharts-基本使用前言ECharts介绍ECharts快速上手ECharts配置说明前言 本篇开始来学习下开源可视化库ECharts ECharts介绍 ECharts是百度公司开源的一个使用 JavaScript 实现的开源可视化库&#xff0c;兼容性强&#xff0c;底层依赖矢量图形 库 ZRender &#xff0c;提供直…