SpringMVC3

一、JSON 与参数传递

1.1JSON 是什么

  • JSON 是字符串:比如 {"name":"zhangsan","password":"123456","age":15} 就是一个 JSON 字符串,它用来在前后端、服务间传递数据。

  • JSON 库:Fastjson、Gson 这些库能把 JSON 字符串转成 Java 对象,也能把 Java 对象转成 JSON 字符串。

1.2传递 JSON vs 传递对象

{

"name": "zhangsan",

"password": "123456",

"age": 15

}

  • Controller 代码:

@RequestMapping("/r9")

public String r9(@RequestBody Person person) {

return "接收到参数 person: " + person;

}

  • @RequestBody :把请求体里的 JSON 字符串转成 Person 对象。

  • 传递对象(表单参数):

  • 请求示例:

  • 请求参数: name=zhangsan&password=123456&age=16 (表单格式)
  • Controller 代码:

@RequestMapping("/r5")

public String r5(Person person) {

return "接收到参数 person: " + person;

}

  • SpringMVC 会自动把表单参数转成 Person 对象(参数名要和对象属性名一致)。

1.3路径参数(@PathVariable)

@RequestMapping("/r8/article/{id}")

public String r8(@PathVariable Integer articleId) {

return "接收到参数 articleId: " + articleId;

}

@RequestMapping("/r11/article/{id}/{type}")

public String r11(@PathVariable("id") Integer id, @PathVariable String type) {

return "接收到参数 id: " + id + ", type: " + type;

}

  • @PathVariable :从 URL 路径中取参数, @PathVariable("id") 里的 "id" 要和路径里的 {id} 对应。

1.4常用注解

  • @RequestMapping:基础注解,映射 URL 路径,可指定请求方法(GET、POST 等)。

  • @GetMapping、@PostMapping:分别是 @RequestMapping(method = RequestMethod.GET) 和 @RequestMapping(method = RequestMethod.POST) 的缩写。

  • @RequestParam:从请求参数中取参数(比如 ?name=zhangsan ),可指定是否必传、默认值等。

  • @RequestBody:接收请求体里的 JSON 数据,转成 Java 对象。

  • @RequestPart:上传文件时用,接收 MultipartFile 。

  • @PathVariable:从 URL 路径中取参数。

  • @RestController:组合注解,等于 @Controller + @ResponseBody ,方法返回值会转成 JSON 或字符串返回给客户端。

二、Cookie 与 Session

2.1无状态 vs 有状态

  • 无状态:HTTP 协议本身是无状态的,每次请求都是独立的,服务器不记得之前的请求。比如你第一次请求和第二次请求,服务器不知道这是同一个客户端。

  • 有状态:通过 Cookie、Session 等技术,让服务器记住客户端状态。比如登录后,服务器知道你是谁。

2.2Cookie

  • 作用:在客户端(浏览器)存数据,每次请求会自动带上 Cookie。

  • 示例:医院的就诊卡,卡上有病人 ID,每次看病都带着卡,医院服务器就知道你是谁。

  • 缺点:不安全,因为 Cookie 存在客户端,可能被篡改。

2.3Session

  • 作用:在服务器存数据,每个客户端对应一个 Session(通过 SessionID 关联)。

  • 工作流程:

  1. 客户端第一次请求,服务器创建 Session,生成 SessionID,把 SessionID 存到 Cookie 里返回给客户端。

  2. 客户端后续请求会带着 Cookie 里的 SessionID,服务器根据 SessionID 找到对应的 Session,获取用户信息。

  • 示例:学校的学生证,学生证号是 SessionID,学校档案里存着你的信息(Session 数据)。你带着学生证(Cookie)去考试,学校根据学生证号(SessionID)查档案(Session 数据),确认你的身份。

  • 优点:安全,因为数据存在服务器,客户端拿不到真实数据。

2.4Cookie 与 Session 的关系

  • SessionID 存在 Cookie 里,客户端靠 Cookie 传递 SessionID,服务器靠 SessionID 找到 Session 数据。

  • 比如登录时,服务器生成 Session 存用户信息,把 SessionID 写进 Cookie 给客户端。之后客户端每次请求都带这个 Cookie,服务器就能识别用户。

代码示例(获取 Cookie)

@RequestMapping("/getCookie")

public String getCookie(HttpServletRequest request, HttpServletResponse response) {

// 从请求中取 Cookie

Cookie[] cookies = request.getCookies();

if (cookies != null) {

for (Cookie cookie : cookies) {

System.out.println("Cookie 名: " + cookie.getName() + ", 值: " + cookie.getValue());

}

}

// 写 Cookie 到响应

Cookie cookie = new Cookie("testCookie", "testValue");

response.addCookie(cookie);

return "操作 Cookie 成功";

}

  • HttpServletRequest:封装了 HTTP 请求,能取 Cookie、参数等。

  • HttpServletResponse:封装了 HTTP 响应,能写 Cookie、返回数据等。

三、总结

本节从 JSON 传递、参数绑定、Cookie/Session 原理到代码示例,把 Web 开发中"数据传递"和"状态保持"的核心知识点讲透了。理解这些内容,你就能搞定前后端联调、用户登录态管理等关键需求

相关推荐
一 乐41 分钟前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
好奇龙猫1 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
saoys1 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
Cherry的跨界思维1 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
C_心欲无痕1 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫1 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子2 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34162 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java