【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传递单个参数

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

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的语法:

  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  1. 值可以为对象, 也可以为数组, 数组中可以包含多个对象
    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,文件的传递;

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


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

😊😊 期待你的关注~~~

相关推荐
木易 士心5 分钟前
Spring AI 核心架构解析:构建企业级 AI 应用的 Java 新范式
java·spring
61900833615 分钟前
linux 安装jdk
java·linux·运维
懂得节能嘛.18 分钟前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
专注于大数据技术栈19 分钟前
Java中JDK、JRE、JVM概念
java·开发语言·jvm
YuanlongWang23 分钟前
C# 基础——值类型与引用类型的本质区别
java·jvm·c#
Kay_Liang1 小时前
大语言模型如何精准调用函数—— Function Calling 系统笔记
java·大数据·spring boot·笔记·ai·langchain·tools
自由的疯1 小时前
Java 如何学习Docker
java·后端·架构
自由的疯1 小时前
Java Docker本地部署
java·后端·架构
007php0071 小时前
猿辅导Java面试真实经历与深度总结(二)
java·开发语言·python·计算机网络·面试·职场和发展·golang
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存