当前位置: 首页 > ops >正文

SpringMVC3

一、JSON 与参数传递

 

1.1JSON 是什么

 

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

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

 

1.2传递 JSON vs 传递对象

 

- 传递 JSON(@RequestBody):

- 请求示例:

- URL: http://127.0.0.1:8080/request/9 

- 请求体:

{

    "name": "zhangsan",

    "password": "123456",

    "age": 15

}

 

- Controller 代码:

@RequestMapping("/r9")

public String r9(@RequestBody Person person) {

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

}

 

 

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

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

- 请求示例:

- URL: http://127.0.0.1:8080/request/5 

- 请求参数: name=zhangsan&password=123456&age=16 (表单格式)

- Controller 代码:

@RequestMapping("/r5")

public String r5(Person person) {

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

}

 

 

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

 

1.3路径参数(@PathVariable)

 

- 示例 URL: https://www.toutiao.com/article/751018054333034562/ 

- 这里的  751018054333034562  就是路径里的参数。

- Controller 代码:

@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 开发中“数据传递”和“状态保持”的核心知识点讲透了。理解这些内容,你就能搞定前后端联调、用户登录态管理等关键需求

 

http://www.xdnf.cn/news/15383.html

相关文章:

  • JavaScript进阶篇——第二章 高级特性核心
  • 【笔记】chrome 无法打开特定协议或访问特定协议时卡死
  • Flink窗口处理函数
  • 0-1搭建springboot+vue的教务管理系统(核心源码)
  • Spring Boot 自带的 JavaMail 集成
  • Python在量化投资中的应用
  • 庸才的自我唤醒
  • Rust语言实战:LeetCode算法精解
  • Spring Boot 双数据源配置
  • 《解锁音频处理新姿势:探索Librosa的无限可能》
  • C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例
  • vue2/3生命周期使用建议
  • SpringBoot JAR 反编译替换文件
  • OneCode3.0 MCPServer:注解驱动的AI原生服务架构与实践
  • Docker部署语音转文字(STT)服务并接入Home Assistant
  • C++11 std::is_permutation:从用法到原理的深度解析
  • androidstudio 高低版本兼容
  • 破解 VMware 迁移难题:跨平台迁移常见问题及自动化解决方案
  • 【第六节】docker可视化工具portainer安装
  • Angular 框架下 AI 驱动的企业级大前端应用开
  • Docker 拉取镜像并离线迁移至云桌面指南(以Redis为例)
  • 高安全前端架构:Rust-WASM 黑盒技术揭秘
  • 安全初级(一)
  • vscode 源码编译
  • CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG
  • 如何连接 AWS RDS 数据库实例
  • React Three Fiber 实现 3D 模型视图切换、显隐边框、显隐坐标轴
  • 从欧洲杯初现到世俱杯之巅:海信冰箱的“保鲜传奇”
  • IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
  • 专题:2025机器人产业深度洞察报告|附136份报告PDF与数据下载