文章目录
什么是 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(); }
此时就可以了