一、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.pswp.cn/bicheng/89504.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89504.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89504.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看.bin二进制文件的方式(HxD十六进制编辑器的安装)

文章目录Windows 系统上安装 HxD 十六进制编辑器的步骤。**HxD 是一款免费、轻量级的工具,适合查看和编辑 .bin 等二进制文件。****PS:实际安装过程中会发现找不到Windows11的版本,安装windows10的即可,并且没有区别setup版和portable版**安装…

Linux系统性能优化与监控

系统性能优化与监控是保障 Linux 服务器稳定运行的核心技术,涉及 ​​CPU、内存、磁盘 I/O、网络、进程​​ 等多维度的指标分析、问题定位与优化策略。以下从​​监控工具与指标​​、​​常见问题诊断​​、​​优化方法​​三个层面详细讲解,并结合​…

如何在 React + TypeScript 中实现 JSON 格式化功能

如何在 React TypeScript 中实现 JSON 格式化功能 作为前端开发者,我们经常需要处理 JSON 数据。无论是 API 调试、配置文件编辑还是数据转换,能够格式化 JSON 是一项基本但非常有用的技能。本文将详细介绍如何在 React 和 TypeScript 环境中实现 JSON…

Mac连接服务器Docker容器全攻略

苹果电脑( macOS 系统 )连接服务器、配置容器,整体思路和 Linux 终端操作更贴近,以下结合 macOS 特点,详细分步说明,以 Docker 容器 + 常见 Linux 服务器( 如 CentOS、Ubuntu )为例: 一、连接服务器(SSH 方式, macOS 终端原生支持 ) 1. 准备信息 找运维或云平台…

【字节跳动】数据挖掘面试题0019:带货直播间推荐:现在有一个带货的直播间,怎么把它精准地推送给有需要的用户

文章大纲 带货直播间推荐系统:原理、算法与实践 一、推荐系统在带货直播中的重要性 二、数据收集与处理 1. 用户数据 2. 直播间数据 3. 用户行为数据 4. 数据处理与特征工程 三、推荐算法实现 1. 基于内容的推荐 2. 基于协同过滤的推荐 3. 基于知识图谱的推荐 4. 混合推荐算法…

Windows10笔记本电脑开启BIOS

文章目录什么是BIOS一、方案一:快捷键进入二、方案二(推荐)各品牌快捷键大全什么是BIOS BIOS 全拼为 BasicInputOutputSystem, 即基本输入/输出系统,是计算机中非常基础而且重要的程序。把这一段程序存放在一个不需要电源的记忆体(芯片)中,就…

NFS、iSCSI 和lnmp部署操作

目录 (一)基础配置 1.NFS服务安装 2.修改配置文件 3.重载配置文件 4.查看共享目录 5.客户端挂载 6.更换共享目录 7.基础实验 (二)布置lnmp平台 1.php 安装软件 检测 2.连接MySQL 测试 3.软件实施 软件安装配置 &…

Redis深度解析:从缓存原理到高并发实战

第一部分:Redis核心概念与架构设计1.1 Redis本质解析Redis(Remote Dictionary Server)作为开源的内存数据结构存储系统,其核心价值在于:内存优先架构:数据主要存储在内存中,读写性能达到10万 QP…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博类别信息爬取

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解架构搭建 视频在线地址: 2026…

GD32/STM32嵌入CMSIS-DSP的库(基于Keil)

当你要用到三角函数、开方、矩阵运算等复杂的数学运算时,可以选择用C库的math.h里面的函数,如果要求速度快的话就得用CMSIS-DSP库里面的函数了,因为CMSIS-DSP库充分运用了CM4内核的浮点运算单元(若有)和DSP相关的指令&…

页面登录阻止浏览器提醒是否保存密码

一、原因 使用input的type"password"类型,浏览器会提醒是否记住密码。 二、解决 取消type"password" 三、实现输入密码*代替 通过input输入框,监听输入值,进行替换成*符号,避免使用input的type"password…

【iOS】dyld加载流程——应用程序的加载

目录 前言 编译过程与动静态库 编译过程 动静态库 dyld 📌 什么是 dyld? dyld_shared_cache: dyld加载流程 _dyld_start dyldbootstrap::start dyld::main() 配置环境变量 共享缓存 主程序的初始化 插入动态库 link主程序 link动态库 弱…

从零开始,手把手教你本地部署Stable Diffusion AI绘画(Win最新版)

本号之前有发过一篇win平台的教程,由于是去年10月发布的,而Al绘画技术发展很快,那篇教程已经有些不适用了,有些同学执行到第二步就出错了。 应广大同学的期望,我更新一版新版详细教程。 一、前言 1.为什么要本地部署…

day21 力扣669. 修剪二叉搜索树 力扣108.将有序数组转换为二叉搜索树 力扣538.把二叉搜索树转换为累加树

修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关…

《设计模式之禅》笔记摘录 - 7.中介者模式

中介者模式的定义中介者模式的定义为:Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently…

Flutter:上传图片,选择相机或相册:wechat_assets_picker

图片选择功能:可选单张,或多张。 1、showModalBottomSheet(选择相册/相机) 2、WechatImagePicker(选取图片) 3、CompressMediaFile(图片压缩)1、ActionSheetUtilimport package:duca…

pytest--0

1 pytest 使用方式 pytest测试框架-- 基本功能使用详解 2 pytest-mock常用方式 pytest–1–pytest-mock常用的方法 3

multiprocessing.Pool 中的 pickle 详解

前言: 在 Python 的 multiprocessing.Pool 中,任务和数据需要通过序列化(pickle)传递给子进程。pickle 是 Python 的内置序列化模块,用于将 Python 对象转换为字节流,以便在进程间通信时传递。然而&#xf…

Java集合框架体系详解:List/Set/Map接口对比与核心实现原理

一、集合框架核心接口对比 1.1 List/Set/Map接口特性接口类型特性描述典型实现List有序可重复,支持索引访问ArrayList/LinkedListSet无序不可重复,基于哈希表或树实现HashSet/TreeSetMap键值对存储,键唯一值可重复HashMap/TreeMap核心差异&am…

LeafletJS 进阶:GeoJSON 与动态数据可视化

引言 LeafletJS 作为一个轻量、灵活的 JavaScript 地图库,以其对 GeoJSON 数据格式的强大支持而闻名。GeoJSON 是一种基于 JSON 的地理数据格式,能够表示点(Point)、线(LineString)、多边形(Po…