SpringMVC之五种类型参数传递

news2024/11/20 13:18:25

目录

一:普通参数

二:POJO数据类型

三:嵌套POJO类型参数

四:数组类型参数

五:集合类型参数

知识点1:@RequestParam


前面我们已经能够使用GET或POST来发送请求和数据,所携带的数据都是比较简单的数据,接下来在这个基础上,我们来研究一些比较负责的参数传递,常见的参数种类有:

  • 普通参数

  • POJO类型参数

  • 嵌套POJO类型参数

  • 数组类型参数

  • 集合类型参数

这些参数如何发送,后台改如何接收?我们一个个来学习。

一:普通参数

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。

 

 

如果形参与地址参数名不一致该如何解决?

发送请求与参数:

http://localhost/commonParamDifferentName?name=张三&age=18

后台接收参数:

@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(String userName , int age){
    System.out.println("普通参数传递 userName ==> "+userName);
    System.out.println("普通参数传递 age ==> "+age);
    return "{'module':'common param different name'}";
}

因为前端给的是name,后台接收使用的是userName,两个名称对不上,导致接收数据失败:

解决方案:使用@RequestParam注解  

@RequestMapping("/commonParamDifferentName")
    @ResponseBody
    public String commonParamDifferentName(@RequestPaam("name") String userName , int age){
        System.out.println("普通参数传递 userName ==> "+userName);
        System.out.println("普通参数传递 age ==> "+age);
        return "{'module':'common param different name'}";
    }

注意:写上@RequestParam注解框架就不需要自己去解析注入,能提升框架处理性能

二:POJO数据类型

简单数据类型一般处理的是参数个数比较少的请求,如果参数比较多,那么后台接收参数的时候就比较复杂,这个时候我们可以考虑使用POJO数据类型。

  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

此时需要使用前面准备好的POJO类,先来看下User

public class User {
    private String name;
    private int age;
    //setter...getter...略
}

发送请求和参数:

后台接收参数:  

//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'module':'pojo param'}";
}

注意:

  • POJO参数接收,前端GET和POST发送请求数据的方式不变。

  • ==请求参数key的名称要和POJO中属性的名称一致,否则无法封装。==

三:嵌套POJO类型参数

如果POJO对象中嵌套了其他的POJO类,如

public class Address {
    private String province;
    private String city;
    //setter...getter...略
}
public class User {
    private String name;
    private int age;
    private Address address;
    //setter...getter...略
}
  • 嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

发送请求和参数:

后台接收参数:  

//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'module':'pojo param'}";
}

注意:

==请求参数key的名称要和POJO中属性的名称一致,否则无法封装==

四:数组类型参数

 

举个简单的例子,如果前端需要获取用户的爱好,爱好绝大多数情况下都是多个,如何发送请求数据和接收数据呢?

  • 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数

发送请求和参数:

后台接收参数:  

//数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
        System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
        return "{'module':'array param'}";
    }

五:集合类型参数

数组能接收多个值,那么集合是否也可以实现这个功能呢?

发送请求和参数:

后台接收参数:  

//集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
@RequestMapping("/listParam")
@ResponseBody
public String listParam(List<String> likes){
    System.out.println("集合参数传递 likes ==> "+ likes);
    return "{'module':'list param'}";
}

运行会报错,

错误的原因是:SpringMVC将List看做是一个POJO对象来处理,将其创建一个对象并准备把前端的数据封装到对象中,但是List是一个接口无法创建对象,所以报错。

解决方案是:使用@RequestParam注解

//集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
    System.out.println("集合参数传递 likes ==> "+ likes);
    return "{'module':'list param'}";
}

 

  • 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

  • 对于简单数据类型使用数组会比集合更简单些。

知识点1:@RequestParam

名称@RequestParam
类型形参注解
位置SpringMVC控制器方法形参定义前面
作用绑定请求参数与处理器方法形参间的关系
相关参数required:是否为必传参数 defaultValue:参数默认值

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

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

相关文章

深度学习中的attention机制

SE 文章 https://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdfhttps://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdf class SELayer(nn.Module):…

Java工具包类

java.util包有很多实用的类、接口和异常。 向量类&#xff0c;堆栈类&#xff0c;哈希表&#xff0c;枚举接口&#xff0c;日历类&#xff0c;随机函数类&#xff0c;映射接口和属性类。 Vector类 vector是异构的&#xff0c;可以存储不同的对象&#xff0c;同时可以动态增加…

【工具】国内苹果市场已上架 新一代社交产品 damus

国内苹果市场可下载 2月1日&#xff0c;Twitter 联合创始人 Jack Dorsey 发布推文表示&#xff0c;基于分布式社交媒体协议 Nostr 的社交产品 Damus 和 Amethyst 正式在苹果 App Store 和谷歌 Google Play Store 上线。 目前为止&#xff0c;Damus 在国内苹果应用市场是可以直…

远程超大功率森林防火喊话与应急广播系统方案

北京恒星科通发布于2023-2-2 一、引言 随着消灭宜林荒山和实现全面绿化&#xff0c;造林事业不断发展&#xff0c;林地面积、林业蓄积量逐年增加&#xff0c;如何加强森林防火、保护环境&#xff0c;是全国当前面临的一项重大任务。 森林火灾是一种突发性和破坏性极强的自然…

Spring Security(新版本)实现权限认证与授权

学习新版SpringSecurity详细配置一、Spring Security介绍1、Spring Security简介2、历史3、同款产品对比3.1、Spring Security3.2、 Shiro二、Spring Security实现权限1、SpringSecurity入门1.1 添加依赖1.2、启动项目测试2、用户认证2.1、用户认证核心组件2.2、用户认证2.2.1、…

CrossOver虚拟机软件2023最新版Mac运行切换Windows

CrossOver2023版是专为苹果电脑用户打造的一款实用工具&#xff0c;这款工具主要方便用户在mac上运行windows系列的应用程序&#xff0c;用户不需要安装虚拟机就可以实现各种应用程序的直接应用&#xff0c;并且可以实现无缝集成&#xff0c;实现跨平台的复制粘贴和文件互通等&…

我为什么抢不到票?!全国最难抢线路揭晓

随着疫情防控策略的转变&#xff0c;不少多年未归的朋友选择在今年返乡团聚。那么2023年春运抢票难度是否会因此而飙升&#xff1f;本期文章&#xff0c;我们通过数据分析&#xff0c;观察比较哪条线路的票最难抢&#xff0c;给还没有买到票的朋友提供参考。 根据往年央视报道和…

浅析晶体管放大电路的负载线

晶体管放大电路的负载线包括直流负载线和交流负载线&#xff0c;描述了输出端电压、电流与负载之间的关系。大学期间曾经学习过相关知识&#xff0c;本文将与大家重温所学内容&#xff0c;并介绍直流工作点对功率放大器性能的影响。 直流负载线 以场效应管为例&#xff0c;图…

基于python3实现Azure机器学习最接近人声的文本转语音功能

上期文章,我们介绍了如何使用Azure来创建一个语音服务API,哪里,我们得到了API的key,以及语音服务的基本信息,包含地区等,这些都是本期代码需要的参数 听了那么多AI合成的语音,Azure机器学习的文本转语音最接近人声https://blog.csdn.net/weixin_44782294/article/detai…

如何实现大文件上传:秒传、断点续传、分片上传

前言 文件上传是一个老生常谈的话题了&#xff0c;在文件相对比较小的情况下&#xff0c;可以直接把文件转化为字节流上传到服务器&#xff0c;但在文件比较大的情况下&#xff0c;用普通的方式进行上传&#xff0c;这可不是一个好的办法&#xff0c;毕竟很少有人会忍受&#…

在字节跳动干了5年的软件测试,2月无情被辞,想给划水的兄弟提个醒

前几天&#xff0c;一个认识了好几年在大厂工作做软件测试的朋友&#xff0c;年近30了&#xff0c;却被大厂以“人员优化”的名义无情被辞&#xff0c;据他说&#xff0c;有一个月散伙饭都吃了好几顿…… 在很多企业&#xff0c;都有KPI考核&#xff0c;然后在此基础上还会弄个…

Ubuntu设置静态IP

Ubuntu设置静态IP1.当前环境2. 设置前准备3.前提准备4.修改VMware中的网络配置5.修改Ubuntu配置文件6.查看网关信息7.Xshell远程连接1.当前环境 VMware16、Xshell7 2. 设置前准备 VMware16设置快照&#xff0c;配置出错可以返回到初始状态 3.前提准备 查看Ubuntu是否安装vi…

小程序项目学习--第七章:播放页布局-歌曲进度控制-歌词的展示

第七章&#xff1a;播放页布局-歌曲进度控制-歌词的展示 01_(了解)之前页面的回顾和播放页的介绍 功能介绍 02_(掌握)播放页-点击Item跳转到播放页和传入ID 功能概览 1.创建页面music-player 2.监听item的点击 方式一&#xff1a;直接写在子组件上 绑定监听点击 需要获取…

关于xxl-job中的慢sql引发的磁盘I/O飙升导致拖垮整个数据库服务

背景&#xff1a; 某天突然发现服务探测接口疯狂告警、同时数据库CPU消耗也告警&#xff0c;最后系统都无法访问&#xff1b; 查看服务端日志&#xff0c;发现大量的报错如下&#xff1a; CommunicationsException: Communications link failure &#xff1a;The last packet s…

dapr入门与本地托管模式尝试

1 简介 Dapr是一个可移植的、事件驱动的运行时&#xff0c;它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序&#xff0c;并可运行在云平台或边缘计算中&#xff0c;它同时也支持多种编程语言和开发框架。Dapr支持的语言很多&#xff0c;包括C/Go/Java/JavaSc…

antv/x6 2.x 搭建流程图编辑页面(1)

进来闲来无事&#xff0c;看到x6 2.x版本也更新了有几个月了&#xff0c;便想着熟悉下2.x版本 一、首先搭建项目基础框架。 // yarn 方式 yarn create vitejs/app v3-ts --template vue-ts cd v3-ts yarn yarn dev// npm npm init vitejs/app v3-ts --template vue-ts cd v3…

人工神经网络BP神经网络结构及优化原理单隐层,多隐层及反向传播梯度下降释义

神经网络&#xff1a;人工神经网络&#xff08;Artificial Neural Networks&#xff0c;简写为ANNs&#xff09;也简称为神经网络&#xff08;NNs&#xff09;或称作连接模型&#xff08;Connection Model&#xff09;&#xff0c;它是一种模仿动物神经网络行为特征&#xff0c…

ASEMI整流模块MDA110-16参数,MDA110-16规格

编辑-Z ASEMI整流模块MDA110-16参数&#xff1a; 型号&#xff1a;MDA110-16 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;1600V 最大RMS电桥输入电压&#xff08;VRMS&#xff09;&#xff1a;1700V 最大平均正向整流输出电流&#xff08;IF&#xff0…

多线程synchronized对象锁与静态锁之间的8锁问题理解

目录8锁问题锁1&#xff1a;多个线程使用同一对象分别调用不同带有带synchronized关键字且非静态的方法锁2&#xff1a;在锁1基础上&#xff0c;增加A线程执行的方法的执行时间&#xff0c;使得B有机会参与执行锁3&#xff1a;多个线程使用同一对象&#xff0c;一个线程执行带有…

三菱Q系列QJ71C24N模块 MODBUS通信(含完整步骤+源代码)

MODBUS通信的其它相关基础知识请参看下面的文章链接: SMART S7-200PLC MODBUS通信_RXXW_Dor的博客-CSDN博客MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从 1979 年出现工业串行链路的事实标准以来,…