🎇个人主页:Ice_Sugar_7
🎇所属专栏:JavaEE
🎇欢迎点赞收藏加关注哦!
简介
Spring Web MVC 是⼀个 Web 框架,简称为 Spring MVC
MVC 是 Model View Controller 的缩写,它是软件工程中一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分
学习Spring MVC, 重点是学习如何通过浏览器和用户程序进行交互
交互主要体现在以下三方面:
① 建立连接:将客户端(一般是浏览器)和 Java 程序连接起来,也就是访问一个可以调用我们的 Spring 程序的地址
② 获取请求中的参数:用户的请求中一般带有参数,我们需要在程序中获取到这些参数
③ 返回响应:执行业务逻辑之后,要把程序执行的结果返回给用户,也就是返回响应
建立连接
@RequestMapping 注解
在 Spring MVC 中我们使用注解 @RequestMapping
来实现浏览器与程序的连接
这个注解既可以修饰类,也可以修饰方法
修饰类时,访问路径为:类路径 + 方法路径
开发时建议路径前面加上 /,并且类路径和方法路径一起使用(虽然类路径可有可无,但为了可读性,最好还是加上)
@RequestMapping
支持 GET 和 POST 请求。同理也支持其他请求方式
参数传递
传递单个参数
@RestController
@RequestMapping("/request")
public class requestDemo1 {
@RequestMapping("/req2")
public String say1(int age) {
return "收到参数,age:"+age;
}
}
注意,对于基本类型,写了参数的话就一定要传参,否则会报错。同时参数的类型要匹配
传递多个参数&对象
和单个参数同理,注意参数匹配时是按参数名进行匹配的,参数的位置不影响后端获取参数的结果
如果参数比较多时,方法中就有很多形参,并且后续每次新增⼀个参数,也需要修改方法声明。所以不妨把这些参数封装为⼀个对象
Spring MVC 可以自动实现对象参数的赋值,举个例子:
public class Student {
private int id;
private String name;
private int age;
//中间是各个参数的 get 和 set 方法,此处省略
//...
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
@RestController
@RequestMapping("/request")
public class requestDemo1 {
@RequestMapping("/req3")
public String classStudent(Student student) {
return "收到参数,student:"+student;
}
}
注意传对象时,基本类型的参数,比如 int,可以不传,此时这个参数默认为 0
后端参数重命名
后端接收的参数名可以和前端的不一样,使用 @RequestParam
来重命名前后端的参数值
@RestController
@RequestMapping("/request")
public class requestDemo1 {
@RequestMapping("/req4")
public String req4(@RequestParam("name") String studentName) {
return "收到前端参数 name:" + studentName;
}
}
被 @RequestParam
修饰的参数默认是必传的,不过可以将 @RequestParam
中的 required 设置为 false,这样就可以不传了。但是注意原先重命名的参数前面要加上 value,之前没加是因为没写 required = false
时,注解属性赋值默认赋给 value
,如果有多个属性进行赋值,需要写上 key
@RequestMapping("/req5")
public String req4(@RequestParam(value = "age",required = false) int studentAge) {
return "收到前端参数 age:" + studentAge;
}
传递数组&集合
数组元素用逗号分隔
@RequestMapping("/req6")
public String req6(String[] array) {
return "数组内容为:" + Arrays.toString(array);
}
传递集合和数组类似,只不过需要用 @RequestParam
绑定参数关系,除此之外和数组基本没啥区别了
传递 JSON 数据
JSON 其实就是用字符串来表示 Key-Value 键值对(除了整型和布尔类型),比如下面这些都是合法的 JSON 数据:
{"name":"Sugar","age":20}
["hello", 1234, "json"] [{"name":"lisi","age":18},{"name":"root","age":16},{"name":"张三","age":24}]
Spring MVC 框架也集成了 JSON 的转换工具,我们可以直接使用,来完成 JSON 字符串和 Java 对象的互转。其实并不复杂,说白了就是,前文传递对象时,我们在前端是 id,name,age 这些成员变量一个一个填,现在使用 JSON 则是一起填,整合到一块(一个 JSON 对象)这样子
通过 Fiddler 观察一下请求参数:
获取 URL 中的参数
我们除了可以把参数写在 body
中,还可以写在 URL
中
@RequestMapping("/req9/{id}/{name}")
public String req9(@PathVariable int id,@PathVariable("name") String studentName) {
return "解析参数:id:" + id + " name:" + studentName;
}
如果方法参数名称和需要绑定的URL中的变量名称⼀致, 那就可以简写, 不用给 @PathVariable
的属性赋值, 如上面例子中的 id
变量;反之如果不一致,那就要给 @PathVariable
中的 value
赋值
上传文件
使用 @RequestPart
注解
//上传文件
@RequestMapping("/req10")
public String req10(@RequestPart("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename(); //获取文件名
file.transferTo(new File("C:/Users/27196/" + fileName)); //将文件上传至指定路径
return "接收到的文件名为:" + fileName;
}