【JavaEE】_Spring MVC 项目传参问题

目录

 1. 传递单个参数

1.1 关于参数名的问题

2. 传递多个参数

2.1 关于参数顺序的问题

2.2 关于基本类型与包装类的问题

3. 使用对象传参

4. 后端参数重命名问题

4.1 关于@RequestPara注解


 1. 传递单个参数

现创建Spring MVC项目,.java文件内容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M1")public String m1(String name){return "Parameter has Received: Name:"+name;}
}

运行启动类,使用Postman向目标地址发送一个GET请求,将待传参数置于query string中,发送的请求与得到的响应如下::

1.1 关于参数名的问题

请注意:客户端传递给服务器的参数应与服务器创建的参数名相同

对于传递单个参数的底层逻辑就是从请求的参数中获取参数名为name的值,并给name赋值;

2. 传递多个参数

在Spring MVC项目的.java文件内容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M2")public String M2(String name, Integer age){return "Parameters have received: \n"+ "Name: "+name + "; Age: "+age;}
}

运行启动类后,构造HTTP请求并发送,详情如下:

2.1 关于参数顺序的问题

注:多个参数传参,与参数的顺序无关,仅与参数名是否匹配有关;

2.2 关于基本类型与包装类的问题

现以基本类型 int 与 包装类Integer 为例:

现Spring MVC项目的.java文件内容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController@RequestMapping("/M3")public String M3(String name, int age){return "Parameters have received: \n"+ "Name: "+name + "; Age: "+age;}
}

示例1:当 int 型参数有具体传参时:

运行启动类,构造HTTP请求并发送,详情如下: 

可见接收正常,返回正常;

示例2:当 int 型参数没有具体传参时:

启动运行类,构造HTTP请求并发送,详情如下:

查看报错信息如下:

建议:在开发中尽量使用包装类,如果使用基本类型的参数,必须要传值

关于包装类的问题,可查看数据结构专栏包装类与泛型一文,链接如下:

【数据结构】_包装类与泛型-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136436372

3. 使用对象传参

如上文所述,当传递的参数个数与类型不同时,就需要频繁修改。

这于前后端配合是非常不便的,在Spring MVC项目中,常使用对象进行传参:

现创建 Person class, 令目录如下:

Person.java文件内容如下:

package com.example.demo;public class Person {Integer id;String name;Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

ParaController.java内容如下:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M4")public String M4(Person person){return "Parameters have received: \n"+ person.toString();}
}

使用postman构造并发送请求,详情如下: 

在spring项目开发中,通常使用对象对要传递的参数组进行封装,这样可以简化接口逻辑。

也方便使用一些逻辑进行默认值的设定;

4. 后端参数重命名问题

在前后端配合时,也有可能会出现对于前端传递的参数名(如name),在后端需要进行修改的问题(如username,articlename等等),此时可以使用@RequestParm注解对后端参数重命名:

现.java文件内容如下:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M5")public String m5(@RequestParam("name") String username){return "Parameter has Received: Name:"+username;}
}

运行启动类,构造HTTP请求并发送,详情如下:

示例1:前端使用name,后端使用username:

示例2:前端与后端均使用username:

查看日志警告信息: 

 

4.1 关于@RequestPara注解

Ctrl+左键点击查看@RequestPara注解源码:

可见@RequestPara注解默认情况为:

当后端使用@RequestPara注解对后端参数进行重命名时,默认该属性为必传属性;

可以修改为false,取消其必传限制:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M5")public String m5(@RequestParam(value = "name",required = false) String username){return "Parameter has Received: Name:"+username;}
}

此时再构造请求发送给服务器:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GORM框架快速入门

GORM框架 gorm地址 :https://github.com/go-gorm/gorm 目前使用最广泛的一个go语言数据库框架 1、入门 数据库以目前使用最多的mysql为例。 //安装MySQL驱动 go get -u gorm.io/driver/mysql //安装gorm包 go get -u gorm.io/gorm //安装gin go get -u github.c…

Quartz 任务调度框架源码阅读解析

概念: quartz 是一个基于JAVA的定时任务调度框架 案例: <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version></dependency>JobDetail job JobBuilder.newJob(Sc…

怎样选择平价美国卷耳猫猫粮?

亲爱的猫友们&#xff0c;我知道在选择平价美国卷耳猫猫粮时&#xff0c;你们可能会遇到一些困惑。毕竟&#xff0c;我们都希望给心爱的猫咪提供最好的&#xff0c;但又不想花费太多。那么&#xff0c;就让我来帮你们解决这个问题吧&#xff01;&#x1f431; 1️⃣ 首先&…

二叉树叶节点个数,节点个数

文章目录 一、计算二叉树节点个数二、叶节点的个数 引言&#xff1a;补充树的概念 节点的度&#xff1a;一个节点含有的子树的个数称为节点的度 叶节点或终端节点&#xff1a;度为0的节点称为叶节点 节点的层次&#xff1a;从根开始为第一层&#xff0c;以此类推 树的度&#x…

【Web - 框架 - Vue】随笔 - 通过CDN的方式使用VUE 2.0和Element UI

通过CDN的方式使用VUE 2.0和Element UI - 快速上手 VUE 网址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源码 https://download.csdn.net/download/HIGK_365/88815507测试 代码 <!DOCTYPE html> <html lang"en"> <head><meta …

探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式

目录 前言一、 单机模式二、 伪分布式模式三、 完全分布式模式&#xff08;重点&#xff09;3.1 准备工作3.2 配置集群3.2.1 配置core-site.xml 文件3.2.2 配置hdfs-site.xml 文件3.2.3 配置yarn-site.xml 文件3.2.4 配置mapred-site.xml 文件 3.3 启动集群3.3.1 配置workers3.…

b站小土堆pytorch学习记录——P14 torchvision中的数据集使用

文章目录 一、前置知识如何查看torchvision的数据集 二、代码&#xff08;附注释&#xff09;及运行结果 一、前置知识 如何查看torchvision的数据集 &#xff08;1&#xff09;打开官网 https://pytorch.org/ pytorch官网 &#xff08;2&#xff09;打开torchvision 在Do…

第十四届蓝桥杯大赛B组 JAVA 蜗牛 (递归剪枝)

题目描述&#xff1a; 这天&#xff0c;一只蜗牛来到了二维坐标系的原点。 在 x 轴上长有 n 根竹竿。它们平行于 y 轴&#xff0c;底部纵坐标为 0&#xff0c;横坐标分别为 x1, x2, …, xn。竹竿的高度均为无限高&#xff0c;宽度可忽略。蜗牛想要从原点走到第 n 个竹竿的底部也…

【笔记版】edgecore.yaml分析总结

1. 文件路径 /etc/kubeedge/config edgecore.yaml是该目录下唯一的文件 附上链接&#xff1a;edgecore.yaml 2. 文件生成方式 2.1 方式一 使用keadm安装部署的方式&#xff0c;执行完keadm join --cloudcore-ipportcloudcore监听的IP地址:端口&#xff08;默认为10002&…

Jmeter基础使用---Token鉴权接口关联

接口测试流程&#xff1a; 查看API接口文档&#xff0c;熟悉接口业务&#xff08;地址、端口、参数、鉴权、状态码&#xff09;设计接口测试用例&#xff08;正例&#xff1a;正确的结果&#xff1b;反例&#xff1a;鉴权异常、参数异常、兼容异常、其他异常&#xff09;使用接…

【STM32+HAL】七针OLED(SSD1306)配置(SPI版)

一、前言 关于四针OLED的I2C版配置方式&#xff0c;请转至【STM32HAL】OLED显示初始化配置 二、实现功能&#xff1a; 用SPI通信方式初始化OLED显示&#xff08;相较于I2C速度更快&#xff09; 三、方法一&#xff1a;硬件SPI通信 1、打开SPI通信&#xff08;仅传输&#xf…

Docker基础教程 - 1 Docker简介

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 1 Docker简介 Docker是一个强大的容器化平台&#xff0c;让你能够更轻松地构建、部署和运行应用程序。 下面我们来学习 Docker。 1.1 Docker是什么 1 现在遇到的问题 每次部署一台服务器&…