1、SpringMVC是一个Web框架
2、SpringMVC是基于Servlet API构建的
但是要深层次的理解SpringMVC,我们就需要搞清楚什么是MVC
MVC是Model View Controller 的缩写,它是软件工程的一种软件架构模式,他把软件系统分为模型、视图和控制器三个基本部分。
1、用户请求首相发到Controller
2、Controller将请求转发给Model
3、Model处理业务并将数据结果给Controller
4、Controller会将数据给View引擎
5、View转换数据生成最终的页面给用户
学习Spring MVC我们只需要掌握一下三个功能:
Spring MVC 可以基于 Spring Boot 创建,也就是创建⼀个 Spring Boot 项⽬,勾选上 Spring Web 模块即可,如下图所示:

创建一个UserController类,实现用户到Spring程序的互联互通
- @RestController
- @RequestMapping("/user")//路由器规则注册
- public class UserController {
- @RequestMapping("/hi")
- public String sayHi(){
- return "
sayHi
"; - }
- }

@RequestMapping即可以修饰类,亦可以修饰方法,当修饰了·方法时访问地址就是注解中的参数:类+方法
我们可以使用Postman测试一下:


测试可知既可以接受Post也可以接受get方法
我们可以显示指定@RequestMapping来接受POST的情况
- @RestController
- @RequestMapping("/user")//路由器规则注册
- public class UserController {
- @RequestMapping(value = "/hi",method = RequestMethod.POST)
- public String sayHi(){
- return "
sayHi
"; - }
- }
此时我们使用postman发送一个get请求就接受不到了

GET请求的三种写法:
- // 写法1
- @RequestMapping("/index")
- // 写法2
- @RequestMapping(value = "/index",method = RequestMethod.GET)
- // 写法3
- @GetMapping("/index")
POST的两种写法:
- // 写法1
- @RequestMapping(value = "/index",method = RequestMethod.POST)
- // 写法2
- @PostMapping("/index")
在Spring MVC中可以直接用方法中的参数来实现传参
- @RestController
- @RequestMapping("/user")//路由器规则注册
- public class UserController {
- @RequestMapping(value = "/hi",method = RequestMethod.POST)
- public String sayHi(){
- return "
sayHi
"; - }
- @RequestMapping("/test")
- public String test(String name){
- return name;
- }
- }
使用Postman 发送请求

Spring MVC可以自动实现参数对象赋值
- @Data
- public class Person {
- private String name;
- private String password;
- private int id;
- }
-
-
- @RestController
- @RequestMapping("/user")//路由器规则注册
- public class UserController {
- @RequestMapping(value = "/hi",method = RequestMethod.POST)
- public String sayHi(){
- return "
sayHi
"; - }
- @RequestMapping("/test")
- public String test(String name){
- return name;
- }
- @RequestMapping("/test2")
- public void test2(Person person){
- System.out.println(person.getName());
- System.out.println(person.getPassword());
- System.out.println(person.getId());
- }
- }
Postman发送请求

最终执行结果;

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个 name 给后端,⽽后端⼜是有 name111 字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值
- @RequestMapping("/test3")
- public String test3(@RequestParam("name")String name111){
- return name111;
- }
Postman返回结果:

我们在postman中构造一个json数据

-
- @RequestMapping("test4")
- public void test4(@RequestBody(required = false) Person person){
- System.out.println(person);
- }

我们可以尝试去掉@RequestBody试试,![]()
@RequestBody 是Spring框架中的一个注解,用于指示一个方法参数应该从请求的body部分中获取数据。通常在处理POST请求时使用,特别是当请求的数据是JSON格式时。
后端实现代码:
- @RequestMapping("/test5/{name}/{password}")
- public void test5(@PathVariable String name,@PathVariable String password){
- System.out.println(name);
- System.out.println(password);
- }
Postman发送请求:

运行结果:

注意事项:@PostMapping("test5/lisi/123")不可以省略
我们上传一个照片文件为例子:
- @RequestMapping("/test6")
- public String test6(@RequestPart("myfile")MultipartFile file) throws IOException {
- //生成一个唯一的id|UUID=全球唯一id
- String name = UUID.randomUUID().toString().replace("-","");
- //得到源文件的后缀名
- name+=(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));
- String path = "D:\\test\\"+name;
- //保存文件
- file.transferTo(new File(path));
- return path;
- }
Postman发送请求:


获取Session
- private static String _SESSION_KEY = "SESSION_KEY";
- @RequestMapping("/set_sess")
- public String setSess(HttpServletRequest request){
- HttpSession session = request.getSession();
- if(session != null){
- session.setAttribute(_SESSION_KEY,"张三");
- return "session set success";
- }else{
- return "session set fail";
- }
- }
- @RequestMapping("/get_sess")
- public String getSess(@SessionAttribute(required = false,value = "SESSION_KEY")String name){
- return name;
- }
Postman运行结果:


获取Cookie
- @RequestMapping("/getcookie")
- public String getCookie(@CookieValue(value="java",required = false)String ck){
- return ck;
- }
获取Header
- @RequestMapping("/header")
- @ResponseBody
- public String header(@RequestHeader("User-Agent") String userAgent) {
- return "userAgent:"+userAgent;
- }