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的方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71684.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle 字符類型對比

本文以 Oracle12c 為例 1.主要區別對比 類型存儲方式最大長度字符集支持適用場景備注?CHAR(M)固定長度空格填充2000 字節&#xff0c;M 代表字節長度默認字符集固定長度編碼實際存儲長度固定為定義長度&#xff08;如 CHAR(10) 始終占 10 字節&#xff09;?VARCHAR2(M)可變長…

Linux系列:如何用heaptrack跟蹤.NET程序的非托管內存泄露

一&#xff1a;背景 1. 講故事 前面跟大家分享過一篇 C# 調用 C代碼引發非托管內存泄露 的文章&#xff0c;這是一個故意引發的正向泄露&#xff0c;這一篇我們從逆向的角度去洞察引發泄露的禍根代碼&#xff0c;這東西如果在 windows 上還是很好處理的&#xff0c;很多人知道開…

vite.config.js 是Vite 項目的配置文件,分析具體用法

vite.config.js 是 Vite 項目的配置文件&#xff0c;用于定義項目的構建、開發服務器、插件等配置選項。以下是示例代碼中各部分的作用分析&#xff1a; 1. 導入模塊 import { fileURLToPath, URL } from node:url import { defineConfig } from vite import vue from vitejs…

行為模式---責任鏈模式

概念 責任鏈模式是一種行為設置模式&#xff0c;它的核心思想就是將請求的發送者和接收者進行解耦&#xff0c;每個接收者都可以處理請求。 在責任鏈模式中將每個接收者連成一個鏈條&#xff0c;當有請求發送上來的時候會經過每一個接收者。直到消息被處理。 適用場景 1、當…

pytest結合allure

Allure 一、文檔二、指令三、裝飾器3.1 allure.step裝飾器3.2 allure.description裝飾器3.3 allure.title裝飾器3.4 allure.link、allure.issue 和 allure.testcase裝飾器3.5 allure.epic、allure.feature 和 allure.story裝飾器3.6 allure.severity裝飾器 一、文檔 allure文檔…

前端知識點---http.createHttp()的理解(arkts)

通俗易懂的例子&#xff1a;點外賣 &#x1f354;&#x1f964; 想象一下&#xff0c;你在家里點外賣&#xff0c;HTTP 請求就像是你和餐廳之間的溝通方式。 1?? 沒有 http.createHttp()&#xff1a;每次點餐都重新撥電話 &#x1f4de; 如果你每次點餐都重新撥打餐廳的電話…

大模型開發(五):P-Tuning項目——新零售決策評價系統(下)

P-Tuning項目——新零售決策評價系統&#xff08;下&#xff09; 0 前言1 P-Tuning原理2 數據處理 0 前言 上篇文章我們介紹了使用PET方式微調BERT模型&#xff0c;PET屬于提示詞微調的一種&#xff0c;另一種比較常見的提示詞微調是P-Tuning&#xff0c;我們今天在相同的項目…

分布式中間件:Redis介紹

目錄 Redis 概述 Redis 的特點 高性能 豐富的數據結構 持久化 分布式特性 簡單易用 Redis 的數據結構 字符串&#xff08;String&#xff09; 哈希&#xff08;Hash&#xff09; 列表&#xff08;List&#xff09; 集合&#xff08;Set&#xff09; 有序集合&…

在昇騰GPU上部署DeepSeek大模型與OpenWebUI:從零到生產的完整指南

引言 隨著國產AI芯片的快速發展&#xff0c;昇騰&#xff08;Ascend&#xff09;系列GPU憑借其高性能和兼容性&#xff0c;逐漸成為大模型部署的重要選擇。本文將以昇騰300i為例&#xff0c;手把手教你如何部署DeepSeek大模型&#xff0c;并搭配OpenWebUI構建交互式界面。無論…

系統思考—組織診斷

“未經過診斷的行動是盲目的。” — 托馬斯愛迪生 最近和一家教育培訓機構溝通時&#xff0c;發現他們面臨一個有意思的問題&#xff1a;每年招生都挺不錯&#xff0c;但教師的整體績效一直提升緩慢&#xff0c;導致師生之間存在長期的不匹配。管理層試了很多辦法&#xff0c;…

AI大模型學習(五): LangChain(四)

Langchian讀取數據庫 案例&#xff1a;在數據庫中表格數據上的問題系統的基本方法,將涵蓋使用鏈和代理的視線,通過查詢數據庫中的數據并得到自然語言的答案,兩者之間的主要區別在于,我們代理可以根據多次循環查詢數據庫以回答問題 實現思路: 1.將問題轉換成DSL查詢,模型將用…

人工智能與深度學習的應用案例:從技術原理到實踐創新

第一章 引言 人工智能(AI)作為21世紀最具變革性的技術之一,正通過深度學習(Deep Learning)等核心技術推動各行業的智能化進程。從計算機視覺到自然語言處理,從醫療診斷到工業制造,深度學習通過模擬人腦神經網絡的層次化學習機制,實現了對復雜數據的高效分析與決策。本…

支持向量機的深度解析:從理論到C++實現

支持向量機(SVM)是一種強大的監督學習算法,廣泛應用于分類和回歸任務。本文詳細探討了SVM的理論基礎,包括最大間隔分離超平面、軟間隔和核技巧(Kernel Trick)的數學原理,并通過LaTeX公式推導其優化目標。接著,我們用C++實現了一個簡單的線性SVM,包括梯度下降優化求解支…

企業如何選擇研發項目進度管理軟件?盤點15款實用工具

這篇文章介紹了以下工具: 1. PingCode&#xff1b; 2. Worktile&#xff1b; 3. 騰訊 TAPD&#xff1b; 4. 華為 DevCloud&#xff1b; 5. 億方云&#xff1b; 6. 阿里云效&#xff1b; 7. CODING 碼云&#xff1b; 8. 明道云&#xff1b; 9. 進度貓&#xff1b; 10. 輕流等。 …

c++: 容器vector

文章目錄 介紹initializer_list與string的不同底層總代碼 介紹 C 中的 vector 是一種序列容器&#xff0c;它允許你在運行時動態地插入和刪除元素。 vector 是基于數組的數據結構&#xff0c;但它可以自動管理內存&#xff0c;這意味著你不需要手動分配和釋放內存。 與 C 數組相…

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一個表格控件&#xff0c;行和列交匯形成的每個單元格&#xff0c;是一個 QTableWidgetItem 對象。 1. QTableWidget屬性 QTableWidget 的屬性只有兩個&#xff1a; 屬性說明rowCount當前行的個數。columnCount當前列的個數。 2. QTableW…

Golang學習筆記_47——訪問者模式

Golang學習筆記_44——命令模式 Golang學習筆記_45——備忘錄模式 Golang學習筆記_46——狀態模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 編譯器實現2. 財務系統3. UI組件系統 四、Go語言實現示例完整實現代碼執行結果 五、…

棧概念和結構

文章目錄 1. 棧的概念2. 棧的分類3. 棧的實現&#xff08;數組棧&#xff09;3.1 接口設計&#xff08;Stack.h&#xff09;3.2 接口實現&#xff08;Stack.c&#xff09;1&#xff09;初始化銷毀2&#xff09;棧頂插入刪除3&#xff09;棧頂元素、空棧、大小 3.3 完整代碼Stac…

GitCode 助力 vue3-element-admin:開啟中后臺管理前端開發新征程

源碼倉庫&#xff1a; https://gitcode.com/youlai/vue3-element-admin 后端倉庫&#xff1a; https://gitcode.com/youlai/youlai-boot 開源助力&#xff0c;開啟中后臺快速開發之旅 vue3-element-admin 是一款精心打造的免費開源中后臺管理前端模板&#xff0c;它緊密貼合…

算法.習題篇

算法 — 地大復試 模擬 while循環和MOD循環計數 1.約瑟夫問題 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判斷當前數組是否一個小孩都沒有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…