Bootstrap

【Spring MVC】关于Spring MVC编程中与http请求的参数传递的详细介绍

前言

🌟🌟本期讲解关于SpringMVC的编程之参数传递~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

目录

📚️1.Postman的使用

1.1Postman的介绍

1.2创建请求的面板介绍

📚️2.请求的参数构造

2.1传递单个参数

2.2传递多个参数

2.3对象的传递

2.4数组的传递

2.5集合的传递

2.6传递JSON数据

2.7获取URL中参数

2.8上传文件

📚️3.总结


📚️1.Postman的使用

1.1Postman的介绍

在之前讲解http的相关的知识的时候,我给uu们讲解过关于Postman的使用,本期就要开始正式的使用这个Postman这个软件了;

随着互联⽹的发展, 也随着项⽬难度的增加, 企业也按照开发的功能, 把⼈员拆分成了不同的团队. 界⾯显⽰交给"前端开发⼯程师", 业务逻辑的实现交给 "后端开发⼯程师".后端开发⼯程师, 不要求也不需要掌握前端技能了.那后端开发⼯程师, 如何测试⾃⼰的程序呢?

-- 使⽤专业的接⼝测试⼯具使⽤的是Postman, 接下来我们来学习Postman的使⽤.

 总结:Postman就是用来测试我们后端自己写的接口的程序的;

1.2创建请求的面板介绍

如下图所示:

上面最重要的就是关于http的构造,其实就是URL的构造;

注意:这里要掌握http的请求头,请求正文的各个参数的理解,知道代表的是啥~~

📚️2.请求的参数构造

2.1传递单个参数

具体的代码就是如下所示:

 @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”类型的话就会直接报错:

 @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包装类型;

代码如下:

@RequestMapping("/r2")
    public String request2(Integer age){
        return "接收到的参数age:"+age;
    }

那么此时就算是参数key值写错了,拿到的就是:

总结:构造URL的时候要注意key值是否和接收的key是一样的,不一样就要进行改正,一般推荐是使用包装类型

2.2传递多个参数

代码如下:

//多个参数的传递
    @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对象的传递

首先我们先定义一个对象,然后输入对应的信息,代码如下所示:

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基础的语法知识,小编就不再过多的进行赘述了

 @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 可以⾃动绑定数组参数的赋值
后端实现代码:

 @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 绑定参数关系

代码如下所示:

 @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代码如下:

{
 "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的语法:
1. 数据在 键值对(Key/Value) 中
2. 数据由逗号 , 分隔
3. 对象⽤ {} 表⽰
4. 数组⽤ [] 表⽰
5. 值可以为对象, 也可以为数组, 数组中可以包含多个对象
 
JSON字符串和Java对象进行互转
JSON本质上是⼀个字符串, 通过⽂本来存储和描述数据Spring MVC框架也集成了JSON的转换⼯具, 我们可以直接使⽤, 来完成JSON字符串和Java对象的互转
本质上是jackson-databind提供的功能, Spring MVC框架中已经把该⼯具包引⼊了进来, 咱们直接使⽤即可, 如果脱离Spring MVC使⽤, 需要引⼊相关依赖
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.13.5</version>
</dependency>

可以看到此时就是引入了一个依赖,来进行Java对象和JSON字符串的转换

此时我们可以通过代码实现两个的互相的转化:
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传递对象

代码如下:

@RequestMapping("r7")
    public String request7(@RequestBody Student student){
        return student.toString();
    }

此时我们在postman中进行http请求构造:

这个就是在正文里通过JSON来进行构造;

 

那么此时就可以看到请求的正文JSON构造,以及得到响应的结果;

2.7获取URL中参数

我们可以看到有些网站后面的参数直接就是一串数字,那么这个是什么呢?这就是在URL中直接写value不写key;

代码如下:

@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上传文件

代码如下所示:

 @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,文件的传递;

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                 😊😊  期待你的关注~~~

;