一.RequestMapping
(1).RequestMapping的简单介绍
1.RequestMapping是Spring Web MVC的注解,既可以修饰类也可以修饰方法,通过RequestMapping修饰后的类和方法,它便可提供用户访问路径。
2.下图中的红色是RequestMapping修饰的类,蓝色线是RequestMapping修饰的方法。括号里面写的是访问路径的URL,其中'/'是可以省略的,但一般不省略。
3.RequestMapping既支持POST请求又支持GET请求,但可以更改为只能是POST请求或者只能是GET请求,在RequstMapping中加一个method的参数,就可以指定接受的请求是POST或者是GET。
4.当只需要GET或者POST的请求并且想写简便一点,可以使用GETMapping和PostMapping,括号里面也写URL。
5.不同类中,这几个不同的类使用了RequestMapping进行修饰的话并且这些类的URL也不相同,如果它们的方法用RequestMapping修饰时的URL相同,也是可以的,但是如果类RequestMapping修饰,则方法RequestMapping修饰时,不能用相同的URL,也就是说不能用相同的名字。
(2)RequestMapping修饰的方法的简单使用
1.前端传入单个普通参数(多个参数也是一样的),后端接受参数(建议接受类型用包装类):
2.当前端需要传入多个参数的时候,后端可以将多个参数变成一个对象来进行传入。
3.后端接受数组:
二.RequestParam(参数绑定)
1.当前端传入的参数的名字和后端接受的名字不同时,后端可以通过@RequestParam来进行重命名:
2.RequestParam也可以叫做参数绑定,当前端传入的参数名不是RequestParam括号里面的参数名时,会报错400,说明这个参数就是必传的参数:
之所以会有状态码400,是因为使用RequestParam的时候,系统默认将参数设置为必传参数,但是可以手动改为非必传参数:
当将required设置为false之后,状态码就不会是400了,此时的就会返回null:
3.当后端接受前端传来的数组时,如果后端直接用List接受,是没办法进行接受的,会对服务器进行报错,并且服务器也会报错:
此时就需要通过RequestParam进行类型绑定,将List绑定成数组类型,后端就可以接受通过List类型来接收数组了:
三.传递JSON数据
1.JSON简单介绍
简单的来说,JSON就是一种数据格式,JSON通过自己的数据格式来让不同语言读懂这个字符串,下图找了一个在线JSON编译器来展示JSON字符串(左边就是JSON字符串,右边就是JSON格式化后的字符串):
2.JSON语法
1. 数据在 键值对(Key/Value) 中
2. 数据由逗号, 分隔
3. 对象⽤ {} 表⽰
4. 数组⽤ [] 表⽰
5. 值可以为对象,也可以为数组,数组中可以包含多个对象
JSON的两种结构
1. 对象:⼤括号 {} 保存的对象是⼀个无序的 键值对 集合.⼀个对象以左括号 { 开始,右括号}
结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔
2. 数组:中括号 [] 保存的数组是值(value)的有序集合.⼀个数组以左中括号 [ 开始,右中括
号 ] 结束,值之间使⽤逗号 , 分隔。
3.Java对象和Json字符串的转换
1.Java对象转Json字符串:
2.Json对象转Java对象:
4.接收Json字符串用RequestBody注解
四.PathVariable(URL)
1.PathVariable注解,用于获取URL中的参数(写的代码是获取URL中的多个参数,而且前端必须传入指定个数的参数):
五.RequestPart(文件)
后端接收文件时,RequestPart可以对参数的重命名:
六.Cookie和Session
1.Cookie和Session的简单介绍
Cookie类比于学生的学生证,当学生考入某个学校时,填入自己的信息就会得到学校发来的学生证,这个学生证相当于是一个令牌,也是学生属于这个学校的身份证明。
Session类比于学校的存储学生信息的数据库,当学生填入了自己的信息之后,就会保存一份学生的信息,并且对应不同的学生就会有不同学生自身的专属SessionId,并且会校验学生证是否存在于学校的数据库当中,相当于对Cookie进行校验,防止伪造。
2.Cookie和Session的区别
(i)Cookie 是客⼾端保存用户信息的⼀种机制.
(ii)Session 是服务器端保存用户信息的⼀种机制.
(iii)Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的 桥梁 Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合. 完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是用户⾝份信息, 也不⼀定是 SessionId。
(iv)Session 中的 sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递。
2.获取Cookie
(i).通过HttpServletRequest获取Cookie
(ii)通过CookieValue获取Cookie的值

3.设置Session
getSession中是一个布尔值,默认为true,当为默认值时,会从Cookie中获取SessionId,根据SessionId获取Session对象,如果没有Cookie或是SessionId在服务器中不存在时,则会创建一个空的Session对象。当getSession中的布尔值为false时,不同于true时是当Cookie不存在或者SessionId在服务器中不存在时,不会创建Session对象了,并且服务器重启,Session就会消失。
4.获取Session
(i)通过HttpServletRequest获取Session对象
(ii)通过HttpSession直接获取Session

(iii)通过注释SessionAttribute直接获取Session

5.获取Header
(i)通过HttpServletRequest获取Header
(ii)通过注释RequestHeader

七.响应
1.返回静态页面和HTML代码片段
2.Controller和RestController区别
简单说一下Controller和RestController的区别,RestController = Controller + ResponseBody在返回一个页面中,如果使用RestController注解,就只会得到一个/Hello.html的字符串,而不会跳转到Hello.html的页面,是因为ResponseBody直接返回了数据,所以就不会进行页面的跳转和处理。ResponseBody即可以修饰类,也可以修饰方法,修饰类的时候就是这个类的所有方法都返回数据,如果加在一个方法上,只有这个方法返回数据。当在一些类中使用的RestController修饰时,将RestController换成Controller可能会将状态码变成404,这是因为,当需要返回字符串时,Controller会将字符串转换成是视图,可我们需要的是字符串,当然找不到视图,则前端的状态码会变成404。
3.返回JSON

4.设置状态码
5.设置Header
1. value:指定映射的URL
2. method:指定请求的method类型,如GET,POST等
3. consumes:指定处理请求(request)的提交内容类型(Content-Type),例如application/json,
text/html;
4. produces:指定返回的内容类型,还可以同时设置返回值的字符编码
5. Params:指定request中必须包含某些参数值时,才让该⽅法处理
6. headers:指定request中必须包含某些指定的header值,才能让该⽅法处理请求
了解即可,更多说明参考Mapping Requests :: Spring Framework
改变Header中的字符串的文本形式
设置Header的信息
八.案例一:加法计算器
1.约定前后端接口文档
(i)请求方式:get/post
(ii)参数:参数名,参数格式
(iii)返回结果:格式和内容
2.该案例的接口文档:
请求路径:calc/sum
请求方式:get/post
接口描述:计算两个整数相加
3.请求参数:
参数名 类型 是否必须 备注
num1 Integer 是 参与计算的第一个数
num2 Integer 是 参与计算的第二个数
4.响应数据
Content - Type: text/html
响应内容:计算机计算结果
后端代码:
前端代码:
九.案例二:用户登入
1.接口定义:
请求路径:/user/login
请求方式:POST
接口描述:校验账号密码是否正确
2.请求参数:
参数名 类型 是否必须 备注
userName String 是 校验的账号
password String 是 校验的密码
3.响应的数据
Content - Type:text/html
响应内容:
true代表账号密码验证成功
false代表账号密码验证失败
4.查询登入用户接口:
请求路径:/user/getLoginUser
请求方式:GET
接口描述:查询当前登入的用户
5.请求参数:无
6.响应的数据:
Content - Type:text/html
相应内容:登入用户名
后端代码:
前端代码:
十.案例三:留言板
1.前后端交互接口:获取留言:
2.请求:GET/message/getList
3.响应:JSON格式:
[
{
"from": "⿊猫",
"to": "⽩猫",
"message": "喵"
},
{
"from": "⿊狗",
"to": "⽩狗",
"message": "汪"
},
//...
]
4.发布新留言接口定义:
1.请求:POST/message/publish
2.响应:JSON格式:
{
ok: 1
}
后端代码:
前端代码:
十一.lombok依赖
Lombok是⼀个Java⼯具库,通过添加注解的⽅式,简化Java的开发,其中的@Data注解可以在开发中不用写SET和GET方法了。需要先引入lombok的依赖才能使用它带来的注释。@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor = @Data
引入lombok依赖:
没有使用@Data时,需要手动写Get,Set和ToString方法:
加入@Data之后就不需要写了: