Java Spring MVC (2)
常见的Request Controller 和 Response Controller 的区别
用餐厅点餐来理解
想象你去一家餐厅吃饭:
- Request Controller(接单员):负责处理你的点餐请求,记录你的口味、桌号等信息。
- Response Controller(厨师+服务员):根据你的需求制作菜品,并把热乎乎的菜端到你桌上。
它们的核心区别:
- Request Controller:专注 接收并解析用户请求(比如拿参数、查Cookie、读Session)。
- Response Controller:专注 构造并返回响应数据(比如返回网页、JSON数据、设置状态码)
第一部分:RespController - 响应处理中心
(相当于快递包装流水线)
1. 地址导航员(返回页面)
@RequestMapping("/r1")
public String returnPage(){return "/index.html";
}
作用:引导用户访问指定网页
示例:类似点击网页导航链接
访问地址
:http://localhost/resp/r1
响应结果
:显示服务器上的index.html网页文件
2. 文字快递员(返回纯文本)
@ResponseBody
@RequestMapping("/r2")
public String returnData(){return "我是前端需要的数据";
}
作用:向浏览器直接发送文字内容
示例:手机收到验证码短信
响应头
:Content-Type: text/plain
响应内容
:直接显示返回的字符串原文
3. HTML零件供应商
@ResponseBody
@RequestMapping("/r3")
public String returnHTML(){return "<h1>我是一级标题</h1>";
}
作用:发送HTML片段让浏览器渲染
示例:网购时的商品描述模块
响应头
:Content-Type: text/html
前端显示
:显示为带样式的标题文字
4. 强制纯文本模式
@ResponseBody
@RequestMapping(value = "/r4", produces = "text/plain")
public String returnTEXT(){return "<h1>我是一级标题</h1>";
}
作用:强制浏览器以纯文本处理内容
示例:收到代码截图文档
响应头
:Content-Type: text/plain
前端显示
:显示原始代码文本 <h1>...
5. JSON数据专员
(需要UserInfo类支持)
@ResponseBody
@RequestMapping("/r5")
public UserInfo returnJSON(){return new UserInfo(1, "zhangsan");
}
作用:发送结构化数据
示例:接收用户信息表单
响应头
:Content-Type: application/json
响应内容
:
{"id":1, "name":"zhangsan"}
6. 异常状态标注员
@ResponseBody
@RequestMapping("/r6")
public UserInfo setStatus(HttpServletResponse response){response.setStatus(400);return new UserInfo(1, "zhangsan");
}
第二部分:RequestController - 需求处理中心
1. 问询接待员(基础参数接收)
示例请求:
访问:http://localhost/request/r1?keyword=手机
响应结果
:接收参数手机
2. 多重接待窗口
@RequestMapping("/r2")
public String r2(String name, String password) {return "usrname" + name + "password" + password;
}
示例请求:
访问:http://localhost/request/r2?name=张三&password=123456
响应结果
:username张三 password123456
3. 数字检查员(包装类)
@RequestMapping("/r3")
public String r3(Integer age) {return "age" + age;
}
特点:
- 允许空值(如访问时不带age参数)
- 示例空请求响应:age null
4. 强制数字模式
@RequestMapping("/r4")
public String r4(int age) {return "age" + age;
}
特点:
- 基本类型必须有值
- 空请求时默认返回 age 0
5. 对象收集员
@RequestMapping("/r5")
public String r5(UserInfo userInfo) {return "userInfo" + userInfo.toString();
}
使用方式:
访问:http://localhost/request/r5?id=2&name=李四
参数自动装配
:转换为UserInfo对象
6. 参数改装员
@RequestMapping("/r6")
public String r6(@RequestParam("q") String keyword) {return "keyword" + keyword;
}
示例请求:
访问:http://localhost/request/r6?q=笔记本电脑
功能
:把参数q映射到keyword变量
7. 批量收货员
@RequestMapping("/r7")
public String r7(String[] arr) {return "arr" + Arrays.toString(arr);
}
示例请求:
访问:http://localhost/request/r7?arr=苹果&arr=香蕉
响应结果
:arr [苹果, 香蕉]
8. 路径解析员
@RequestMapping("/article/{type}/{articleId}")
public String article(@PathVariable String type, @PathVariable Integer articleId) {return "articleId" + articleId+"type"+type;
}
示例请求:
访问:http://localhost/request/article/tech/1001
响应结果
:articleId1001 typetech
9. 包裹接收员(文件上传)
@RequestMapping("r12")
public String r12(@RequestPart("file11") MultipartFile file) {file.transferTo(new File("C:\\temp\\"+file.getOriginalFilename()));return "文件上传成功";
}
使用方式:使用Postman等工具上传文件
表单字段名
:file11
保存路径
:C盘temp目录
10. 会员卡收集员
@RequestMapping("/r13")
public String r13(HttpServletRequest request) {Cookie[] cookies = request.getCookies();return "返回cookie成功";
}
功能:查看浏览器携带的所有Cookie
11. 精准会员卡读取器
@RequestMapping("/r14")
public String r14(@CookieValue("java")String java) {return "Cookie中java的值:"+java;
}
要求:浏览器必须携带名为java的Cookie
12. 储物柜管理员(Session操作)
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("userName", "zhangsan");return "设置session成功";
}
效果:
创建类似保险箱的会话存储空间,通过Cookie自动关联用户
13. 储物柜检查员(会话验证)
@RequestMapping("/getSession3")
public String getSession3(@SessionAttribute("userName") String userName){return "登录用户为" + userName;
}
使用场景对比表
功能需求 | 对应控制器 | 典型方法示例 |
---|---|---|
需要给浏览器返回网页 | RespController | returnPage() (/r1) |
开发RESTful API接口 | RequestController | returnJSON()(/r5) |
用户登录状态保持 | RequestController | setSession()相关方法 |
处理复杂的表单参数 | RequestController | r5(UserInfo对象接收) |
需要控制响应头信息 | RespController | setHeader() (/r7) |
上传用户头像文件 | RequestController | r12()文件上传方法 |
移动端接口开发 | RequestController | 所有带@RestController的方法 |
相关文章:
Java Spring MVC (2)
常见的Request Controller 和 Response Controller 的区别 用餐厅点餐来理解 想象你去一家餐厅吃饭: Request Controller(接单员):负责处理你的点餐请求,记录你的口味、桌号等信息。Response Controller(…...
对开源VLA sota π0的微调——如何基于各种开源数据集、以及你自己的私有数据集微调π0(含我司的微调实践)
前言 25年2.4日,几个月前推出π0的公司Physical Intelligence (π)宣布正式开源π0及π0-FAST,如之前所介绍的,他们对用超过 10,000 小时的机器人数据进行了预训练 该GitHub代码仓库「 π0及π0-FAST的GitHub地址:github.com/Ph…...

[排序算法]直接插入排序
1.基本思想 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。 实际中我们玩扑克牌时,就用…...
四、云原生应用监控-Etcd
Etcd 是 Kubernetes 内部核心组件之一,作为分布式键值存储,天然支持 Prometheus 监控,自带 /metrics 端点,可直接被 Prometheus 抓取。 Etcd监控需要使用到证书。 一、检查云原生Etcd 检查节点上的Etcd [root@k8s-master01 manifests]#netstat -lnpt |grep etcd tcp …...

STM32-I2C通信外设
目录 一:I2C外设简介 二:I2C外设数据收发 三:I2C的复用端口 四:主机发送和接收 五:硬件I2C读写MPU6050 相关函数: 1.I2C_ GenerateSTART 2.I2C_ GenerateSTOP 3.I2C_ AcknowledgeConfig 4.I2C…...

CTA策略【量化理论】
CTA策略演变史 全称:Commodity Trading Advisor (商品交易顾问) CTA最开始是指通过为客户提供期权、期货方面的交易建议,或者直接通过受管理的期货账户参与实际交易,来获得收益的机构或个人。 随着市场的发展&#…...

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享
作者:Hello,Panda 各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。 一、方案背景 先说方案的应用背景:众所周知,较为上层的如基于AI的机器视觉应用,大多基于高端的专用SoC、AI专…...

②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 网关 MS-A1-5081 MS-A1-5081 网关通过 MODBUS TCP 协议与 Modbus RTU/ASCII 协议的相互转换,可以将 Modbus 串口设备接入 MODBUS TCP 网络…...

游戏引擎学习第145天
仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前,我们正在完成遗留的工作。当时我们已经将声音混合器(sound mixer)集成到了 SIMD 中,但由于一个小插曲,没有及时完成循环内部的部分。这个小插曲主要是…...
【Kotlin】Kotlin基础笔记
一、数据类型 1.1 变量声明与类型推导 变量声明 使用 val 声明不可变变量(相当于常量);使用 var 声明可变变量。 val a 10 // 类型自动推断为 Int,不可变 var b: Double 5.0 // 显示声明为 Double,可变变量…...

Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). )
Jump( 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15). ) 题目大意: 在这个交互式问题中,你需要通过查询系统,逐步找出隐藏的位字符串 S。给定一个偶数 n,表示目标位字符串 S 的长度,你需要通…...

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!
此文章懒得排版了,为了找出这个bug, 星期六的晚上我从9点查到0点多,此时我心中一万个草泥马在崩腾,超级想骂人!!!!!!!!! uniCloud 不想…...

【Linux】冯诺依曼体系与操作系统理解
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充:理解系统调用…...

STM32之软件SPI
SPI传输更快,最大可达80MHz,而I2C最大只有3.4MHz。输入输出是分开的,可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意:所有设备需要共地,时钟线主机输出&…...
Python零基础学习第三天:函数与数据结构
一、函数基础 函数是什么? 想象你每天都要重复做同一件事,比如泡咖啡。函数就像你写好的泡咖啡步骤说明书,每次需要时直接按步骤执行,不用重新想流程。 # 定义泡咖啡的函数 def make_coffee(sugar1): # 默认加1勺糖 print("…...

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED
问题:启动wsl里的Ubuntu24报错 报错信息: 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件,并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息,请访…...
顶点着色器和片段着色器
在Unity渲染中,**顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)**是图形渲染管线中的两个核心阶段。我们可以通过一个比喻来理解它们的分工:想象你要画一幅由三角形组成的3D模型,顶点…...
std::optional详解
基础介绍 c17版本引入了std::optional特性,这一个类模板,基本的使用方法如下: std::optional<T> 这个新特性的含义是利用std::optional<T>创建的某个类型的对象,这个对象存储某个类型的值,这个值可能存在…...

Web三件套学习笔记
<!-- HTML --> HTML是超文本标记语言 1、html常用标签 块级标签 独占一行 可以设置宽度,高度,margin,padding 宽度默认所在容器的宽度 标签作用table定义表格h1 ~ h6定义标题hr定义一条水平线p定义段落li标签定义列表项目ul定义无序列表ol定…...
Scala 中trait的线性化规则(Linearization Rule)和 super 的调用行为
在 Scala 中,特质(Trait)是一种强大的工具,用于实现代码的复用和组合。当一个类混入(with)多个特质时,可能会出现方法冲突的情况。为了解决这种冲突,Scala 引入了最右优先原则&#…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...