Spring Web MVC入门
目录
学习Spring MVC
一、建立连接
@RestController和@RequestMapping
@RequestMapping 使用
访问地址:类路径+方法路径
既支持Get请求又支持Post请求
⭐️指定GET方法类型
🌙指定POST方法类型
二、请求
1️⃣传递单个参数
2️⃣传递多个参数
3️⃣传递对象
4️⃣后端参数重命名(后端参数映射)
非必传参数设置
5️⃣传递数组
6️⃣传递集合
7️⃣传递JSON数据
JSON字符串和Java对象互转
传递JSON对象
传递对象和传递JSON的区别
8️⃣获取URL中参数@PathVariable
参数重命名
9️⃣上传文件@RequestPart
参数重命名
🔟 获取Cookie/Session
📝面经: Cookie 和 Session 的区别
获取Cookie
🍃传统获取Cookie
🍂简洁获取Cookie:@CookieValue
Session存储
获取Session
🍈方式一:
🍒方式二:
🥥方式三: @SessionAttribute
1️⃣1️⃣获取Header
🌭传统获取 header
🍔简洁获取 Header:@RequestHeader
三、响应
返回静态页面:@Controller
前端代码
后端代码
返回数据:@ResponseBody
返回HTML代码片段
返回JSON
设置状态码
设置Header (了解)
设置Content-Type
设置其他Header
Spring Web MVC咱们简称之为: Spring MVC
Spring MVC 是⼀个实现了 MVC 模式的 Web 框架
学习Spring MVC
一、建立连接
将用户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调用到我们的Spring 程序
@RestController和@RequestMapping
@RestController
public class UserController {
@RequestMapping("/hello")
public String sayHello() {
return "Hello Spring";
}
}
@RequestMapping 使用
访问地址:类路径+方法路径
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/hello")
public String sayHello() {
return "Hello Spring";
}
}
既支持Get请求又支持Post请求
⭐️指定GET方法类型
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String sayHello() {
return "Hello Spring";
}
}
@GetMapping
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/hello")
public String sayHello() {
return "Hello Spring";
}
}
🌙指定POST方法类型
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String sayHello() {
return "Hello Spring";
}
}
@PostMapping
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/hello")
public String sayHello() {
return "Hello Spring";
}
}
二、请求
用户请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能
传递的普通参数,默认类型为String,后端接收时,会根据后端定义的类型来转换
1️⃣传递单个参数
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p1")
public String p1(String name) {
return "接收到参数 name:" + name;
}
}
2️⃣传递多个参数
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p2")
public String p2(String name, Integer age) {
return "接收到参数,age:" + age + ", name:" + name;
}
}
3️⃣传递对象
public class User {
private String name;
private Integer age;
private Integer gender;
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;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p3")
public String p3(User user) {
return "user:" + user;
}
}
4️⃣后端参数重命名(后端参数映射)
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p4")
public String p4(@RequestParam("userName") String name, Integer age) {
return "接收到参数,age:" + age + ", name:" + name;
}
}
使用@RequestParam进行参数重命名时,请求参数只能和@RequestParam声明的名称一
致,才能进行参数绑定和赋值.
使用@RequestParam进行参数重命名时,参数就变成了必传参数.
非必传参数设置
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p4")
public String p4(@RequestParam(value = "userName", required = false) String name, Integer age) {
return "接收到参数,age:" + age + ", name:" + name;
}
}
5️⃣传递数组
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p5")
public String p5(String[] arr) {
return "arr:" + List.of(arr);
}
}
6️⃣传递集合
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p6")
public String p6(@RequestParam List<String> list) {
return "list:" + list;
}
}
7️⃣传递JSON数据
JSON字符串和Java对象互转
package com.example.demo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User();
user.setName("lisi");
user.setAge(18);
user.setGender(1);
// 对象转json
String s = objectMapper.writeValueAsString(user);
System.out.println(s);
//json转对象
User user1 = objectMapper.readValue(s, User.class);
System.out.println(user1);
}
}

传递JSON对象
@RequestBody
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p7")
public String p7(@RequestBody User user) {//从请求正文中
return "User:" + user;
}
}
传递对象和传递JSON的区别
8️⃣获取URL中参数@PathVariable
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/article/{articleId}")
public String p8(@PathVariable("articleId") String articleId) {//从请求正文中
return "articleId:" + articleId;
}
}
参数重命名
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/article/{articleId}/{name}")
public String p8(@PathVariable("articleId") String id, @PathVariable String name) {//从请求正文中
return "articleId:" + id + ",name:" + name;
}
}
如果方法参数名称和需要绑定的URL中的变量名称一致时,可以简写, 不用给@PathVariable的属性赋值
如果方法参数名称和需要绑定的URL中的变量名称不一致时, 需要给@PathVariable的属性value赋值
9️⃣上传文件@RequestPart
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p9")
public String p9(MultipartFile file) {
System.out.println(file.getOriginalFilename());
return "文件名称:" + file.getOriginalFilename();
}
}
参数重命名
@RequestMapping("/param")
@RestController
public class ParamController {
@RequestMapping("/p9")
public String p9(@RequestPart("fileName") MultipartFile file) {
System.out.println(file.getOriginalFilename());
return "文件名称:" + file.getOriginalFilename();
}
}
🔟 获取Cookie/Session
📝面经: Cookie 和 Session 的区别
●Cookie是客户端保存用户信息的一种机制.Session是服务器端保存用户信息的一种机制.
●Cookie和Session之间主要是通过Sessionld关联起来的,Sessionld是Cookie和Session之间的桥梁
●Cookie和Session经常会在一起配合使用.但是不是必须配合.
o 完全可以用Cookie来保存一些数据在客户端.这些数据不一定是用户身份信息,也不一定是Sessionld
o Session中的sessionld也不需要非得通过Cookie/Set-Cookie传递,比如通过URL传递.
获取Cookie
🍃传统获取Cookie
@RestController
@RequestMapping("/header")
public class HeaderController {
@RequestMapping("/getCookie")
public String getCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println(cookie.getName() + ":" + cookie.getValue());
}
}
return "获取cookie成功";
}
}

🍂简洁获取Cookie:@CookieValue
@RestController
@RequestMapping("/header")
public class HeaderController {
@RequestMapping("/getCookie")
public String getCookie2(@CookieValue("baidu") String baidu) {
return "从Cookie中获取信息,baidu:" + baidu;
}
}
Session存储
@RestController
@RequestMapping("/header")
public class HeaderController {
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("userName", "zhangsan");
session.setAttribute("age", "15");
return "设置session成功";
}
}
获取Session
🍈方式一:
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request) {
HttpSession session = request.getSession();
if (session != null) {
String userName = (String) session.getAttribute("userName");
System.out.println(session.getAttribute("age"));
return "从session中获取信息,userName:" + userName;
}
return null;
}
🍒方式二:
@RequestMapping("/getSession")
public String getSession(HttpSession session) {
if (session != null) {
String userName = (String) session.getAttribute("userName");
System.out.println(session.getAttribute("age"));
return "从session中获取信息,userName:" + userName;
}
return null;
}
🥥方式三: @SessionAttribute
@RequestMapping("/getSession")
public String getSession(@SessionAttribute("userName") String userName) {
return "从session中获取信息,userName:" + userName;
}
1️⃣1️⃣获取Header
🌭传统获取 header
@RestController
@RequestMapping("/header")
public class HeaderController {
@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request) {
String uesrAgent = request.getHeader("User-Agent");
return "uesrAgent:" + uesrAgent;
}
}
🍔简洁获取 Header:@RequestHeader
@RestController
@RequestMapping("/header")
public class HeaderController {
@RequestMapping("/getHeader")
public String getHeader(@RequestHeader("User-Agent") String uesrAgent) {
return "uesrAgent:" + uesrAgent;
}
}
三、响应
返回静态页面:@Controller
前端代码
后端代码
@RequestMapping("/response")
@Controller
public class ResponseController {
@RequestMapping("/returnHtmlPage")
public String returnHtmlPage() {
return "/hello.html";
}
}
返回数据:@ResponseBody
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/returnHtmlPage")
public String returnHtmlPage() {
return "/hello.html";
}
}
返回HTML代码片段
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/returnHtml")
public String returnHtml() {
return "<h1>returnHtml<h1>";
}
}
返回JSON
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/returnJson")
public User returnJson() {
User user = new User();
user.setName("zhangsan");
user.setAge(18);
return user;
}
}
设置状态码
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/setStatus")
public User setStatus(HttpServletResponse response) {
User user = new User();
user.setName("zhangsan");
user.setAge(18);
response.setStatus(500);
return user;
}
}
设置Header (了解)
设置Content-Type
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/setHeader")
public String setHeader() {
return "{\"success\":true}";
}
}
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping(value = "/setHeader",produces = "application/json")
public String setHeader() {
return "{\"success\":true}";
}
}
设置其他Header
@RequestMapping("/response")
@Controller
@ResponseBody
public class ResponseController {
@RequestMapping("/setHeader")
public String setHeader(HttpServletResponse response) {
response.setHeader("myKey", "myValue");
return "success";
}
}