Spring MVC

一.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. 对象:⼤括号 {} 保存的对象是⼀个无序的 键值对 集合.⼀个对象以左括号 { 开始,右括号}

结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔

  1. 数组:中括号 [] 保存的数组是值(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;

  1. produces:指定返回的内容类型,还可以同时设置返回值的字符编码

  2. Params:指定request中必须包含某些参数值时,才让该⽅法处理

  3. 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之后就不需要写了:

相关推荐
BillKu41 分钟前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis
全栈凯哥42 分钟前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表
chxii43 分钟前
12.7Swing控件6 JList
java
全栈凯哥44 分钟前
Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解
java·算法·leetcode·链表
YuTaoShao1 小时前
Java八股文——集合「List篇」
java·开发语言·list
PypYCCcccCc1 小时前
支付系统架构图
java·网络·金融·系统架构
华科云商xiao徐1 小时前
Java HttpClient实现简单网络爬虫
java·爬虫
扎瓦1 小时前
ThreadLocal 线程变量
java·后端
BillKu2 小时前
Java后端检查空条件查询
java·开发语言
jackson凌2 小时前
【Java学习笔记】String类(重点)
java·笔记·学习