JavaEE进阶 --Spring Framework、Spring Boot和Spring Web MVC(3)

一.使用Postman发送请求参数

1.传递单个参数

1)接收参数为Integer类型

注意事项:

2)接收参数为int类型时

3)boolean类型或Boolean类型

2.传递多个参数

3. 传递对象

知识补充:

1)后端参数重命名

某些特殊的情况下,前端传递的参数key和我们后端接收的key可以不⼀致,⽐如前端传递了⼀个 time 给后端,而后端是使⽤createtime字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值。

2)非必传参数设置

但以上举例传了重命名或与之不匹配的参数时,会报400,这是应为用了@RequestParam后这个参数就会变为必传参数,所以没接收到就会报错,那该如何处理呢?

4.传递数组

5.传递集合

集合参数:和数组类似,同⼀个请求参数名有为多个,且需要使⽤ @RequestParam 绑定参数关系

6.传递JSON数据

知识补充

1)JSON的语法:
  1. 数据在 键值对 (Key/Value) 中

  2. 数据由逗号 , 分隔

  3. 对象⽤ {} 表⽰

  4. 数组⽤ [] 表⽰

  5. 值可以为对象,也可以为数组,数组中可以包含多个对象

2)JSON字符串和Java对象互转

JSON本质上是⼀个字符串,通过⽂本来存储和描述数据

Spring MVC框架也集成了JSON的转换⼯具,我们可以直接使⽤,来完成JSON字符串和Java对象的互转 本质上是jackson-databind提供的功能,SpringMVC框架中已经把该⼯具包引⼊了进来,咱们直接使 ⽤即可,如果脱离SpringMVC使⽤,需要引⼊相关依赖

3)使用

接收JSON对象时,得用RequestBody注解

7.上传文件

二.获取请求/响应中的信息

1.获取URL中参数

使用的注解:@PathVariable

2.获取Cookie/Session

回顾Cookie和Session

1)Cookie

HTTP协议⾃⾝是属于"⽆状态"协议.

"⽆状态"的含义指的是: 默认情况下HTTP协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系. 但是实际开发中,我们很多时候是需要知道请求之间的关联关系的. 例 如登陆⽹站成功后,第⼆次访问的时候服务器就能知道该请求是否是已经登陆过了. Cookie是客户端为了保存⽤⼾信息⽽创建的⼀个特殊的对象.

2)Session

在计算机领域, 会话是⼀个客⼾与服务器之间的不中断的请求响应.对客⼾的每个请求,服务器能够识 别出请求来⾃于同⼀个客⼾.当⼀个未知的客⼾向Web应⽤程序发送第⼀个请求时就开始了⼀个会话. 当客⼾明确结束会话或服务器在⼀个时限内没有接受到客⼾的任何请求时,会话就结束了.

服务器同⼀时刻收到的请求是很多的.服务器需要清楚的区分每个请求是属于哪个⽤⼾,也就是属于哪 个会话,就需要在服务器这边记录每个会话以及与⽤⼾的信息的对应关系. Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象.

Session的本质就是⼀个"哈希表",存储了⼀些键值对结构.Key就是SessionID,Value就是⽤⼾信息(⽤ ⼾信息可以根据需求灵活设计)

SessionId 是由服务器⽣成的⼀个"唯⼀性字符串",从Session机制的⻆度来看,这个唯⼀性字符串称 为"SessionId". 但是站在整个登录流程中看待,也可以把这个唯⼀性字符串称为"token".

3)具体流程和相关图像
  1. 当⽤⼾登陆的时候,服务器在Session中新增⼀个新记录(即增加一个唯一的sessionid并存储相关信息),并把sessionId返回给客⼾端.(通过 HTTP响应中的Set-Cookie字段返回).

  2. 客⼾端后续再给服务器发送请求的时候,需要在请求中带上sessionId.(通过HTTP请求中的 Cookie 字段带上).

  3. 服务器收到请求之后,根据请求中的sessionId在Session信息中获取到对应的⽤⼾信息,再进⾏后 续操作.找不到则重新创建Session,并把SessionID返回

4)Cookie和Session的区别

• Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.

• Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的 桥梁

• Cookie和Session经常会在⼀起配合使⽤.但是不是必须配合.

◦ 完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是 SessionId

◦ Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递.

5)代码使用

Spring MVC是基于ServletAPI构建的原始Web框架,也是在Servlet的基础上实现的 HttpServletRequest , HttpServletResponse 是Servlet提供的两个类,是Spring MVC⽅法的内置对象.需要时直接在⽅法中添加声明即可.

HttpServletRequest 对象代表客⼾端的请求,当客⼾端通过HTTP协议访问服务器时,HTTP请 求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信 息.

HttpServletResponse 对象代表服务器的响应.HTTP响应的信息都在这个对象中,⽐如向客⼾ 端发送的数据,响应头,状态码等.通过这个对象提供的⽅法,可以获得服务器响应的所有内容 Spring MVC在这两个对象的基础上进⾏了封装,给我们提供更加简单的使⽤⽅法.

代码:
效果:
6)获取Cookie和Session的简洁方法

3.获取Header中的属性

三.响应

1.返回静态页面

结果却发现,⻚⾯未正确返回,http响应把 "/index.html" 当做了http响应正⽂的数据

那SpringMVC如何才能识别出来 index.html 是⼀个静态⻚⾯,并进⾏返回呢?

我们需要把 @RestController 改为 @Controller

@RestController 和 @Controller 有着什么样的关联和区别呢?

前面说的MVC模式,后端会返回视图,这是早期时的概念,随着互联⽹的发展,⽬前项⽬开发流⾏"前后端分离"模式, Java主要是⽤来做后端项⽬的开发,所以也就 不再处理前端相关的内容了 MVC的概念也逐渐发⽣了变化,View不再返回视图,⽽是返回显⽰视图时需要的数据.所以前⾯使⽤的 @RestController 其实是返回的数据.

@RestController = @Controller + @ResponseBody

@Controller: 定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理(后续会在SpringIoc中讲).

@ResponseBody : 定义返回的数据格式为⾮视图,返回⼀个text/html信息

@ResquestController源码:

但是如果数据中有HTML片段会被浏览器解析

响应中的Content-Type常⻅取值有以下⼏种:

2.返回JSON

四.设置Header

1.设置Content-Type

2.设置自己创造的Header

五.设置响应的状态码

相关推荐
xufengzhu3 小时前
Springboot项目信创选型
java·spring boot·后端
一 乐3 小时前
非遗文化传承网站|基于springboot + vue非遗文化传承网站系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·非遗文化传承网站
我是大猴子3 小时前
Spring源码的解析
java·mysql·spring
bKYP953cL4 小时前
Prompt 缓存的四种策略:从精确匹配到语义检索
spring·缓存·prompt
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
@yanyu6661 天前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot