前言
🌟🌟本期讲解关于SpringMVC的编程之参数传递~~~
🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客
🔥 你的点赞就是小编不断更新的最大动力
🎆那么废话不多说直接开整吧~~
目录
📚️1.Postman的使用
1.1Postman的介绍
在之前讲解http的相关的知识的时候,我给uu们讲解过关于Postman的使用,本期就要开始正式的使用这个Postman这个软件了;
随着互联⽹的发展, 也随着项⽬难度的增加, 企业也按照开发的功能, 把⼈员拆分成了不同的团队. 界⾯显⽰交给"前端开发⼯程师", 业务逻辑的实现交给 "后端开发⼯程师".后端开发⼯程师, 不要求也不需要掌握前端技能了.那后端开发⼯程师, 如何测试⾃⼰的程序呢?
-- 使⽤专业的接⼝测试⼯具使⽤的是Postman, 接下来我们来学习Postman的使⽤.
总结:Postman就是用来测试我们后端自己写的接口的程序的;
1.2创建请求的面板介绍
如下图所示:
上面最重要的就是关于http的构造,其实就是URL的构造;
注意:这里要掌握http的请求头,请求正文的各个参数的理解,知道代表的是啥~~
📚️2.请求的参数构造
2.1传递单个参数
具体的代码就是如下所示:
java
@RequestMapping("/r1")
public String request(String name){
return "接收到的name参数是:"+name;
}
此时我们运行完程序后,就可通过Postman构造http请求了:http://127.0.0.1:8080/user/r1?name=zhuhaiyang
然后我们发送请求之后:
解释:
这里的name就是我们所想要接收的参数,这里的name就是得是一样的,不一样就无法得到这个规定名为"zhuhaiyang"的参数,那么就会默认为null
但是如果是"int"类型的话就会直接报错:
java
@RequestMapping("/r2")
public String request2(int age){
return "接收到的参数age:"+age;
}
此时我们构造URL请求:
http://127.0.0.1:8080/user/r2?age1=19
Optional int parameter 'age' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type
注意:如果是int类型的话,参数不对就会出现如上述的情况,重点在与不能是null,所以int建议写作integer包装类型;
代码如下:
java
@RequestMapping("/r2")
public String request2(Integer age){
return "接收到的参数age:"+age;
}
那么此时就算是参数key值写错了,拿到的就是:
总结:构造URL的时候要注意key值是否和接收的key是一样的,不一样就要进行改正,一般推荐是使用包装类型
2.2传递多个参数
代码如下:
java
//多个参数的传递
@RequestMapping("/r3")
public String request3(@RequestParam("userName") String name, @RequestParam("userAge") Integer age){
return "姓名:"+name+"年龄"+age;
}
注意:多个参数的传递和单个参数的传递几乎是一致的,但是小编这里添加了新的注解:@RequestParam("userName"),这代表就是重命名,这里指定的参数名称就是前端构造URL的参数,如下所示:
http://127.0.0.1:8080/user/r3?userName=zhangsan&userAge=19
那么此时就可以拿到参数并返回;
注意:在重命名后的参数名称在URL的构造中就要进行使用,不能够使用原来的参数的名称~~~,否则就会出现写错名字的参数就是null的;
2.3对象的传递
首先我们先定义一个对象,然后输入对应的信息,代码如下所示:
java
public class Student {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
这里就是Java基础的语法知识,小编就不再过多的进行赘述了
java
@RequestMapping("r6")
public String request6(Student student){
return student.toString();
}
可以看到这里就是通过tostring来进行打印返回
这里的URL的构造就是如下所示的:
http://127.0.0.1:8080/user/r6?name=zhangsan&age=19&sex=nan
拿到的结果响应就是如下:
注意:Spring 会根据参数名称⾃动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则 赋值为默认初识值, ⽐如int类型的属性, 会被赋值为0
2.4数组的传递
Spring MVC 可以⾃动绑定数组参数的赋值
后端实现代码:
java
@RequestMapping("/r4")
public String request4(String[] array){
return Arrays.toString(array);
}//这里也可以使用逗号进行分开的操作
可以看到此时就是规定一个数组参数,然后通过我们熟知的方法进行返回响应,对应的URL的构造就是如下所示的:
http://127.0.0.1:8080/user/r4?array=zhangsan&array=lisi&array=wangwu
拿到的响应的结果就是:
但是我们这里的URL的构造的方法可不止一种,如下所示:
http://127.0.0.1:8080/user/r4?array=zhangsan,lisi,wangwu
http://127.0.0.1:8080/param/m6?listParam=zhangsan%2Clisi%2Cwangwu
2.5集合的传递
这里的集合传递和数组的传递几乎是一致的,集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系
默认情况下,请求中参数名相同的多个值,是封装到数组. 如果要封装到集合,要使⽤
@RequestParam 绑定参数关系
代码如下所示:
java
@RequestMapping("/r5")
public String request5(@RequestParam("getList") List<String> list){
return "这里接收到的参数list:"+list;
}
注意:这里也可以进行重命名的操作,此时构造的URL和数组几乎一致,如下所示:
http://127.0.0.1:8080/user/r5?getList=zhangsan,lisi,wangwu
此时得到的结果就是如下所示:
2.6传递JSON数据
简介:JSON就是⼀种数据格式, 有⾃⼰的格式和语法, 使⽤⽂本表⽰⼀个对象或数组的信息, 因此
JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换
简单语法,json代码如下:
XML
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance", "Turning tiny", "Radiation
blast"]
}, {
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": ["Million tonne punch", "Damage resistance", "Superhuman
reflexes"]
}]
}
解释:
JSON的语法:
- 数据在 键值对(Key/Value) 中
- 数据由逗号 , 分隔
- 对象⽤ {} 表⽰
- 数组⽤ [] 表⽰
- 值可以为对象, 也可以为数组, 数组中可以包含多个对象
JSON字符串和Java对象进行互转
JSON本质上是⼀个字符串, 通过⽂本来存储和描述数据Spring MVC框架也集成了JSON的转换⼯具, 我们可以直接使⽤, 来完成JSON字符串和Java对象的互转
本质上是jackson-databind提供的功能, Spring MVC框架中已经把该⼯具包引⼊了进来, 咱们直接使⽤即可, 如果脱离Spring MVC使⽤, 需要引⼊相关依赖
XML
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>
可以看到此时就是引入了一个依赖,来进行Java对象和JSON字符串的转换
此时我们可以通过代码实现两个的互相的转化:
java
public class JsonTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper=new ObjectMapper();
String json="{\"name\":\"zhangsan\",\"age\":19,\"sex\":\"nan\"}";
Student student=objectMapper.readValue(json,Student.class);
System.out.println(student);
//对象转字符串
String jsonstr=objectMapper.writeValueAsString(student);
System.out.println(jsonstr);
}
}
注意:因为spring集成了这个Jackson,所以就不必进行引入依赖的操作了;
解释:这里即通过objectmapper对象进行JSON字符串转化为对象,此时调用的就是student类中的无参构造函数,来创建的student对象;最后再通过writevalueAsString转化为JSON字符串
JSON的优点:
1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和传输
3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输速度
4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼的安全性
JSON传递对象
代码如下:
java
@RequestMapping("r7")
public String request7(@RequestBody Student student){
return student.toString();
}
此时我们在postman中进行http请求构造:
这个就是在正文里通过JSON来进行构造;
那么此时就可以看到请求的正文JSON构造,以及得到响应的结果;
2.7获取URL中参数
我们可以看到有些网站后面的参数直接就是一串数字,那么这个是什么呢?这就是在URL中直接写value不写key;
代码如下:
java
@RequestMapping("/r8/{name}/{age}")
public String request8(@PathVariable String name,@PathVariable("age") Integer userAge){
return "name:"+name+"age:"+userAge;
}
解释:
这里就使用了@PathVariable注解;(也可以进行改名的操作)此时的参数key就是requestMapping注解中的括号里,所以就可直接在URL中写入value,不用写key;
http://127.0.0.1:8080/user/r8/zhangsan/19
得到的响应就是如下所示的:
如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋值, 如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值,
如上述例⼦中的userName变量
2.8上传文件
代码如下所示:
java
@RequestMapping("/r9")
public String request9(@RequestPart("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
file.transferTo(new File("E:/"+file.getOriginalFilename()));
return "上传的文件的名称:"+fileName;
}
此时我们在postman上进行操作:
此时就能在对应的文件看到我们的图片了;
解释:这里使用了@RequestPart("file")这个注解,transferTo是将这个文件转到对应的文件夹下;
📚️3.总结
本期小编主要且重点讲解了关于spring mvc中与http请求的参数构造和传递,包含了多种传递,咧如参数,对象,集合,数组,JSON,文件的传递;
🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!
💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。
😊😊 期待你的关注~~~