【Spring Web MVC】(什么是 Spring Web MVC? MVC 建立连接(客户端和服务器) 请求 传递单个参数 传递多个参数 传递对象 传递数组 传递集合)

avatar
作者
筋斗云
阅读量:0

文章目录


什么是 Spring Web MVC?

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring MVC”,comes from the name of its source module (spring-webmvc)

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”

MVC

MVC是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分

MVC就是把一个项目分成了三部分

在这里插入图片描述
MVC是一种思想,Spring进行了实现,称为Spring MVC

在这里插入图片描述
SpringBoot是创建SpringMVC项目的一种方式。

当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以也就没有view层,所以view又有了一层解释,之前返回的是视图,现在返回的是视图所需要的数据。

在这里插入图片描述

建立连接(客户端和服务器)

@RequestMapping就是建立了路由映射

@RequestMapping可以修饰方法也可以修饰类

访问地址:类的路径+方法路径

在这里插入图片描述

http://127.0.0.1:8080/hello/sayhello
在这里插入图片描述
@RequestMapping支持get和post

注解如果没有写属性名,默认是value,如下源码:

在这里插入图片描述
如果多了属性,比如我们设置必须使用get请求(限制请求方式):

@RequestMapping(value = "/sayhi",method = RequestMethod.GET) public String sayHi(){     return "hi,SpringBoot!!!"; } 

在这里插入图片描述

在这里插入图片描述
使用postman查看post请求:
在这里插入图片描述

请求

请求就是学习如何传参(下命令)

传递单个参数
@RequestMapping("/param") @RestController public class ParamController {     @RequestMapping("/m1")     public String m1(String name){         return "接收到参数name:" + name;     } }  

没有传参数
在这里插入图片描述
传了参数

在这里插入图片描述

spring就接收到参数。

只需要保持名称一样,底层逻辑:从请求的参数中,获取参数名为name的值,并给name赋值

传递多个参数
@RequestMapping("/param") @RestController public class ParamController {     @RequestMapping("/m2")     public String m2(String name,Integer age){         return "接收到参数name:" + name + "age: " + age;     } } 

在这里插入图片描述
传递多个参数的时候也是直接发送,参数的顺序可以调换。
此时将Integer换成int,正常赋值,请求是正常的。
在这里插入图片描述

如果将不传int这个参数,就出问题了
在这里插入图片描述

查看日志:age是一个int类型的,不能转化成null值,因为我们没有传值,我们只传了个name,基本类型int不能转成null值,日志建议我们使用基本类型的包装类型。
在这里插入图片描述

如果使用基本类型必须要传参。

传递对象

传递一个对象:

public class Person {     Integer id;     String name;     Integer age;      @Override     public String toString() {         return "Person{" +                 "id=" + id +                 ", name='" + name + '\'' +                 ", age=" + 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;     } } 

在这里插入图片描述
在这里插入图片描述

http://127.0.0.1:8080/param/m4?name=zhangsan&age=19&id=5
传递对象Spring会帮我们进行关系的映射,开发中接口的参数通常定义为对象。

修改后端参数:

@RequestMapping("/m5")     public String m4(@RequestParam("name")String username){         return "接收到参数name:" + username;     } 

在这里插入图片描述
如果把参数改成username就没有拿到数据了

在这里插入图片描述

在这里插入图片描述
日志信息告诉我们下面的参数是必传参数;
在这里插入图片描述
若不想是必须传入的参数,只需要后面加上参数required,并且值为false。
在这里插入图片描述
再次测试发现值为null,
在这里插入图片描述

所以,如果进行了重命名,就必须要使用@RequestMapping注解里的名字。

传递数组
@RequestMapping("/m6")     public String m6(String[] arrayParam){         return "接收到参数name:" + Arrays.toString(arrayParam);     } 

传递数组,当我们请求中,同一个参数有多个时,浏览器就会帮我们给封装成一个数组。
http://127.0.0.1:8080/param/m6?arrayParam=zhangsan&arrayParam=lisi&arrayParam=wangwu

在这里插入图片描述

还可以用逗号分割:
http://127.0.0.1:8080/param/m6?arrayParam=zhangsan,lisi,wangwu
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

传递集合
@RequestMapping("/m7")     public String m7(List<String> listParam){         return "接收到参数name:" + listParam + "长度:" + listParam.size();     } 

我们进行传递集合发现报了个服务器错误500
在这里插入图片描述

查看日志:意思是默认给封装成了数组而不是list接口,如果我们想用list需要使用注解。
在这里插入图片描述

@RequestMapping("/m7")     public String m7(@RequestParam List<String> listParam){         return "接收到参数name:" + listParam + "长度:" + listParam.size();     } 

此时就可以了

在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!