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

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;
}

使用场景对比表

功能需求对应控制器典型方法示例
需要给浏览器返回网页RespControllerreturnPage() (/r1)
开发RESTful API接口RequestControllerreturnJSON()(/r5)
用户登录状态保持RequestControllersetSession()相关方法
处理复杂的表单参数RequestControllerr5(UserInfo对象接收)
需要控制响应头信息RespControllersetHeader() (/r7)
上传用户头像文件RequestControllerr12()文件上传方法
移动端接口开发RequestController所有带@RestController的方法

相关文章:

Java Spring MVC (2)

常见的Request Controller 和 Response Controller 的区别 用餐厅点餐来理解 想象你去一家餐厅吃饭&#xff1a; Request Controller&#xff08;接单员&#xff09;&#xff1a;负责处理你的点餐请求&#xff0c;记录你的口味、桌号等信息。Response Controller&#xff08…...

Linux网络相关内容与端口

网络相关命令 ping命令测试连接状态 wget命令&#xff1a;非交互式文件下载器&#xff0c;可以在命令行内下载网络文件 使用ctrlc可以中止下载 curl命令&#xff1a;可以发送http网络请求&#xff0c;用于文件下载、获取信息等 其实和浏览器打开网站一样&#xff0c;cu…...

Spring Boot + MyBatis + MySQL:快速搭建CRUD应用

一、引言 1. 项目背景与目标 在现代Web开发中&#xff0c;CRUD&#xff08;创建、读取、更新、删除&#xff09;操作是几乎所有应用程序的核心功能。本项目旨在通过Spring Boot、MyBatis和MySQL技术栈&#xff0c;快速搭建一个高效、简洁的CRUD应用。我们将从零开始&#xff…...

日新F1、瑞研F600P 干线光纤熔接(熔接损耗最大0.03DB)

Ⅰ. 设备特性对比与实测验证 1. 日新F1&#xff08;两马达&#xff09;极限参数 切割角度&#xff1a;必须≤0.3&#xff08;双边累计误差&#xff1c;0.6&#xff09; ▶ 实测案例&#xff1a;切割0.35时&#xff0c;损耗波动达0.05-0.08dB&#xff08;超干线标准&#xff09…...

分布式网络

分布式网络&#xff08;Distributed Network&#xff09;指的是一种计算机网络架构&#xff0c;其中计算资源&#xff08;计算、存储、数据处理等&#xff09;分布在多个物理或逻辑上的节点上&#xff0c;而不是集中在单一的服务器或数据中心中。这种架构的主要目标是提高系统的…...

【招聘精英】

我们公司是一个位于石家庄的一个科技型新型技术公司。主要做人力资源、用工、科技等方面。 有意向回石家庄的或者已经在石家庄的技术大咖、软件大牛、产品大佬、UI大神可以来了解一下。 现在招聘 高级前端开发 高级java开发 其他岗位也可以联系。 有意向的朋友可以私信我。 -…...

ESP8266 NodeMCU 与 Atmega16 微控制器连接以发送电子邮件

NodeMCU ESP8266 AVR 微控制器 ATmega16 的接口 Atmega16 是一款低成本的 8 位微控制器,比以前版本的微控制器具有更多的 GPIO。它具有所有常用的通信协议,如 UART、USART、SPI 和 I2C。由于其广泛的社区支持和简单性,它在机器人、汽车和自动化行业有广泛的应用。 Atmega1…...

MongoDB用户管理和复制组

用户管理 1、建用户时&#xff0c;use到的库就是此用户的验证库 2、登录时必须明确指定验证库才能登录 3、通常管理员用的验证库是admin&#xff0c;普通用户的验证库一般是所管理的库设置为验证库 4、如果直接登录到数据库&#xff0c;不进行use&#xff08;示例&#xff…...

GoLang的select是什么?在什么时候场景下用

在 Go 语言中&#xff0c;select 是专门用于处理通道&#xff08;Channel&#xff09;多路复用的关键字&#xff0c;它可以同时监听多个通道的读写操作&#xff0c;并根据就绪的通道执行对应的逻辑。以下是 select 的用法和典型应用场景&#xff1a; 一、基本用法 select 语法…...

SQLAlchemy系列教程:集成Pydantic增强数据处理能力

本教程介绍如何将Pydantic用于数据验证&#xff0c;SQLAlchemy用于数据库操作&#xff0c;从而通过强大的数据处理能力增强Python应用程序。 介绍 在现代web开发中&#xff0c;确保数据的有效性和完整性至关重要。Pydantic和SQLAlchemy是两个功能强大的Python库&#xff0c;可…...

【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&…...

python中httpx库的详细使用及案例

文章目录 1. 安装 httpx2. 同步请求3. 异步请求4. 高级功能5. 错误处理6. 配置客户端7. 结合 Beautiful Soup 使用8. 示例:抓取并解析网页9. 注意事项httpx 是一个现代化的 Python HTTP 客户端库,支持同步和异步请求,功能强大且易于使用。它比 requests 更高效,支持 HTTP/2…...

IP,MAC,ARP 笔记

1.什么是IP地址 IP 地址是一串由句点分隔的数字。IP 地址表示为一组四个数字&#xff0c;比如 192.158.1.38 就是一个例子。该组合中的每个数字都可以在 0 到 255 的范围内。因此&#xff0c;完整的 IP 寻址范围从 0.0.0.0 到 255.255.255.255。 IP 地址不是随机的。它们由互…...

【记录】Python3|Linux下安装Virtualenv和virtualenvwrapper用于处理虚拟环境

之前写过一篇Anaconda的&#xff1a;【安装】Python3&#xff5c;Windows下安装Anaconda、pytorch&#xff0c;以及修改pip默认安装路径_anaconda pip修改安装的包路径-CSDN博客 还写过一篇专门讲所有虚拟环境的&#xff1a;【记录】环境&#xff5c;Ubuntu18.04 Python 开发环…...

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

Selenium库打开指定端口(9222、9333等)浏览器【已解决!!!】

就是在写动态爬虫爬取数据的过程中&#xff0c;如果用selenium的话&#xff0c;有一个缺点&#xff0c;就是当我们去测试一个网站能不能爬取&#xff0c;它都会重新换端口打开一个浏览器&#xff0c;不会使用上一次使用的浏览器&#xff0c;在实际使用过程中这样调试很烦&#…...

Redis在人员管理系统中的应用示例

用户会话管理 场景&#xff1a;用户登录后存储会话信息&#xff0c;支持多服务器共享 实现&#xff1a; 用户登录成功后&#xff0c;生成唯一Token&#xff08;如JWT&#xff09;&#xff0c;作为Redis的Key Value存储用户ID、角色、权限等信息&#xff0c;设置过期时间&…...

蓝桥杯备考:倍增算法详解

如果我们想暴力求解的话&#xff0c;我们的时间复杂度是O&#xff08;N&#xff09;b最大是10的9次方&#xff0c;这时候我们一定会超时 #include <iostream> using namespace std;typedef long long LL; LL a,b,p;LL ret 1; int main() {cin >> a >> b &g…...

安徽省考计算机专业科目2025(持续更新)

目录 第一部分 计算机科学技术基础 第一章 计算机及其应用基础知识 1.1 计算机的特点、分类及其应用 1.2 信息编码与数据表示&#xff1b;数制及其转换方法&#xff1b;算术运算和逻辑运算的过程 第一部分 计算机科学技术基础 第一章 计算机及其应用基础知识 1.1 计算机…...

PostgreSQL、SQL Server和MySQL数据库性能调优与故障排除技术

通过结合具体技术特性与工具链的深度使用&#xff0c;可系统化提升数据库性能和稳定性。建议根据实际负载特征制定监控-分析-优化的闭环管理流程。 数据库技术&#xff1a; PostgreSQL 13&#xff1a;逻辑复制、分区表、并行查询、监控工具&#xff08;如pg_stat_statements、…...

【贪心算法2】

力扣122.买卖股票最佳时机Ⅱ 链接: link 思路 要求最大利润&#xff0c;可以分解成子问题求解&#xff0c;在最低价格买入&#xff0c;最高价格卖出。 假如第0天价格最低&#xff0c;第3天价格最高&#xff0c;利润prices[3] - pricnes[0], 可以将利润公式拆解成 (prices[3]…...

SQL经典查询

查询不在表里的数据&#xff0c;一张学生表&#xff0c;一张学生的选课表&#xff0c;要求查出没有选课的学生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…...

## DeepSeek写水果记忆配对手机小游戏

DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…...

Flask 框架简介

Flask 框架简介 Flask 框架简介 Flask 框架简介 Flask 是一个 Python 微型网页开发框架。微型指明了 Flash 的核心是轻量级的&#xff0c;但是可以灵活扩展。下面的简单的例子要和一个数据库系统交互。Django附带了与最常见的数据库交互所需的库。另一方面&#xff0c;Flask允…...

【GoTeams】-5:引入Docker

本文目录 1. Dokcer-compose回顾下Docker知识编写docker-compose.yaml运行docker 2. 部署go服务编写dockerfile 1. Dokcer-compose 这里简单先用一下win版本的Docker&#xff0c;后期开发好了部署的时候再移植到服务器下进行docker部署。 输入命令docker-compose version 就可…...

将自定义vue组件加载在Mapbox或Maplibre的marker和popup上

1. 使用场景 在开发WebGIS应用时&#xff0c;我们常需要将自定义UI组件与地图元素结合。本文介绍如何将Vue组件集成到Mapbox/Maplibre的Marker标记点和Popup弹窗中&#xff0c;实现动态交互式的地图功能。 2. 为什么需要特殊处理&#xff1f; 在常规开发中我们大多的处理是 …...

定时任务和分布式任务框架

文章目录 一 Spring Task1.@Scheduled注解介绍2 基本用法(1)使用@EnableScheduling修饰启动类(2)创建定时任务的类(3)fixedDelay(4)fixedRate(5)cron3 执行多个任务4 设置异步执行5 @Async使用自定义线程池6 缺点二 xxl-job介绍架构图与其他任务调度平台的比较运行调…...

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249&#xff0c; webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间&#xff0c;下面介绍下如何修改配置这个区间。 从页面上修改这个区间&#xff0c;端口区间尽量设置大…...

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…...

Mac服务器上创建Docker并安装宝塔环境

1. 远程ssh登录服务器&#xff1a;ssh -o ProxyCommand"nc -X 5 -x 127.0.0.1:7890 %h %p" -i fenfaqianming.pem ec2-user54.254.XXX.XXX 2. mac服务器上需要安装Colima 3. brew install colima 4. colima start 5. colima autostart 创建mac服务器安装docker &…...