SpringBoot中常用的注解及其用法

1. 常用類注解

@RestController和@Controller是Spring中用于定義控制器的兩個類注解.

1.1?@RestController

@RestController是一個組合類注解,是@Controller@ResponseBody兩個注解的組合,在使

用?@RestController?注解標記的類中,每個方法的返回值都會以 JSON 或 XML等 的形式直接寫入 HTTP 響應體中,相當于在每個方法上都添加了?@ResponseBody注解.

代碼演示(訪問127.0.0.1:8080/hello/hello1):

@RequestMapping("/hello")
@RestController
public class HelloController {@RequestMapping("/hello1")public String hello() {return "hello spring mvc1";}}

返回的結果如下:

我們可以使用fiddler進行抓包:

可以看到返回的類型是text/html,可以把它看成是一個text或者是html.

1.2 @Controller

@Controller是一個類注解,其主要作用是標記類表示返回的是一個視圖(view).這是用于傳統的SpringMVC架構中的類注解.

代碼演示:

@RequestMapping("/response")
@Controller
public class ResponseController {@RequestMapping("/index")public String index(){return "/index.html";}}
//index.html
<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>用戶登錄首頁</title>
</head><body>登錄人: <span id="loginUser"></span><script src="/jquery.min.js"></script><script></script>
</body></html>

這樣就返回了一個html頁面(視圖).

總之,@RestController和@Controller的區別就在于要返回一個視圖(頁面)還是要返回數據.

1.3 @RequestMapping

@RequestMapping表示路由映射,即通過@RequestMapping注解可以達到設置url的目的.在訪問時只有加入@RequestMapping映射的部分,才能成功找到這個路徑.\

代碼演示:

@RequestMapping("/hello")
@RestController
public class HelloController {@RequestMapping("/hello1")public String hello() {return "hello spring mvc1";}
}

我們只有啟動服務器,再訪問127.0.0.1:8080/hello/hello1才能成功接收到后端返回的"hello spring mvc1"這個數據.

?2. 常用方法注解

2.1 @RequestMapping

我們剛才介紹了@RequestMapping是一個類注解,它其實還是一個方法注解,我們在使用方法時需要在方法上也添加上這個注解.同樣表示的是路由映射,影響我們訪問的url.我們再來看一下,其中的屬性:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective({ControllerMappingReflectiveProcessor.class})
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};
}
public enum RequestMethod {GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,TRACE;
}

其中我們主要介紹method這個屬性,method取值于RequestMethod這個枚舉類型,我們使用的最多的就是GET和POST:

    @GetMapping("/hello3")public String hello3() {return "hello spring mvc3";}@PostMapping("/hello4")public String hello4() {return "hello spring mvc4";}

報錯信息:Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' is not supported]

POST表示只有使用post請求時才允許進行正確的響應,GET表示get請求時才允許進行正確的響應.如果這個參數不寫,就表示post和get請求都允許.

2.2 @PostMapping

與?@RequestMapping(value = "/hello2",method = RequestMethod.POST)的效果類似,只允許post請求.

2.3 @GetMapping

與?@RequestMapping(value = "/hello2",method = RequestMethod.GET)的效果類似,只允許get請求.

2.4 @RequestParam

這個參數主要有兩個作用.

在前端給后端傳遞參數時,需要規定好參數的名稱,使其保持一致否則將無法成功傳參.例如前端傳給我們的用戶名稱叫做userName,但是后端接收這個參數的名稱叫做name,就無法成功接收.但是我們可以使用@RequestParam這個注解進行參數的綁定,將userName綁定到name上,這樣后端就可以使用name進行操作了.還可以在其中required屬性中設置true/false,表示這個參數是否是必須的.

代碼演示:

    @RequestMapping("/param6")public String param6(@RequestParam(value = "userName",required = false)String name,String password){System.out.println("receive userName:"+name+" password:"+ password);return "receive name: "+name+" password:"+ password;}

另外一個主要作用是用來傳遞集合.對于一個簡單的數組來說,我們直接傳遞不會出現任何問題,但是如果我們直接傳遞一個集合,就會發現傳過來的集合是空的.這時,就需要@RequestParam這個注解來將數組綁定到這個集合上,給集合賦值.'

代碼演示:

    @RequestMapping("/param8")public String param8(@RequestParam("listParam") List<String> listParam){System.out.println("receive listParam: "+listParam);return "receive listParam: "+listParam;}

2.5 @RequestBody

@RequestBody這個注解主要用來接收對象(傳遞JSON類型的參數),比如我們需要給后端傳遞一個UserInfo對象:

public class UserInfo {public String userName;public String password;public int age;@Overridepublic String toString() {return "UserInfo{" +"userName='" + userName + '\'' +", password='" + password + '\'' +", age=" + age +'}';}
}

我們就需要給出userName,password和age三個參數的值,在傳遞過程中會將這三個參數轉變成JSON格式的數據,只有我們加上@RequestBody這個注解才能成功接收到這個JSON數據,并把它轉換成對象.

代碼演示:

    @RequestMapping("/param9")public String param9(@RequestBody UserInfo userInfo){System.out.println("receive userInfo: "+userInfo);return "receive userInfo: "+userInfo;}

2.6 @PathVariable

@PathVariable這個注解用來從url中獲取到參數.比如下述例子,我們要從url中獲取到articlName,我們就可以使用這個注解加上一定的格式進行獲取:

    @RequestMapping("/param10/{articlName}")public String param10(@PathVariable("articlName") Integer articlName){System.out.println("receive articlName: "+articlName);return "receive articlName: "+articlName;}

2.7 @RequestPart

@PathVariable這個注解用來進行文件的接收.代碼演示如下:

@RequestMapping("/param12")public String param12(@RequestPart MultipartFile file) throws IOException {System.out.println(file.getName());System.out.println(file.getOriginalFilename());System.out.println(file.getContentType());file.transferTo(new File("D:/temp/"+file1.getOriginalFilename()));return file1.getOriginalFilename();}

2.8 @CookieValue

@CookieValue這個注解用來根據cookie中的鍵獲取對應的值.代碼演示如下:

    @RequestMapping("/getCookie2")public String getCookie2(@CookieValue("lzq") String value) {System.out.println(value);System.out.println("get cookies successfully");return "get cookies successfully";}

2.9 @SessionAttribute

@SessionAttribute這個注解用來根據session中的鍵獲取對應的值.代碼演示如下:

    @RequestMapping("/getSession3")public String getSession3(@SessionAttribute(value = "name",required = false) String name) {System.out.println("name "+name);System.out.println("get session successfully");return "get session successfully";}

2.10 @RequestHeader

@RequestHeader這個注解用來根據header中的鍵獲取對應的值.代碼演示如下:

    @RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String userAgent) {System.out.println(userAgent);System.out.println("get userAgent successfully");return "get userAgent successfully";}

2.11 @ResponseBody

@ResponseBody是@RestController的一部分,通常用在當@Controller修飾類控制器,而其中某些方法需要返回數據而不是視圖時,代碼演示如下:

    @ResponseBody@RequestMapping("/returnData")public String returnData() {System.out.println("returnData");return "returnData";}

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

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

相關文章

【Android安全】Ubuntu 下載、編譯 、刷入Android-8.1.0_r1

0. 環境準備 Ubuntu 16.04 LTS&#xff08;預留至少95GB磁盤空間&#xff0c;實測占94.2GB&#xff09; Pixel 2 XL 要買歐版的&#xff0c;不要美版的。 歐版能解鎖BootLoader、能刷機。 美版IMEI里一般帶“v”或者"version"&#xff0c;這樣不能解鎖BootLoader、…

網絡安全-網絡安全及其防護措施2

6.安全設計和日志 安全審計 安全審計是對系統和網絡活動進行檢查和記錄的過程&#xff0c;確保合規性和安全性。審計過程可以幫助發現潛在的安全漏洞和違規行為&#xff0c;并驗證系統配置和操作的正確性。 定期審計 定義&#xff1a;定期檢查系統和網絡的安全配置和活動記錄…

394. 字符串解碼 739. 每日溫度(LeetCode熱題100)

394. 字符串解碼 - 力扣&#xff08;LeetCode&#xff09; curr_str&#xff1a;遍歷整個字符串時 如果左邊有[&#xff0c;且無相應右括號和其匹配&#xff0c;那么curr_str就表示該[到當前位置的解碼字符串如果左邊的[]已經匹配&#xff0c;或者沒有[]&#xff0c;curr_siz…

找不到vcruntime140_1.dll 無法執行的相關解決方法,如何高效率修復vcruntime140_1.dll

當出現“找不到 vcruntime140_1.dll 無法執行”這類提示時&#xff0c;意味著你的系統中的 vcruntime140_1.dll 文件已經缺失或者損壞。為了恢復并正常啟動你的程序&#xff0c;你需要對這個 DLL 文件進行修復。接下來&#xff0c;我們將詳細介紹如何進行這一操作。 一.找不到v…

數學建模·層次分析法

層次分析法 LAF 定義 評價體系的優劣影響&#xff0c;計算評價指標的權重的一種方法 主觀性較強&#xff0c;現在一般不用 主要步驟 關鍵在于一致性檢驗和求權值 權重的計算 注意權重之和為1&#xff0c;需要歸一化 算數平均法 特征值法 矩陣的一致性檢驗 為什么要檢驗…

【C語言】原碼、反碼、補碼詳解 -《碼上有道 ! 》

目錄 原碼、反碼、補碼詳解及其在C語言中的應用一、原碼&#xff08;Sign-Magnitude&#xff09;1.1 定義與表示1.2 歷史來源與作用1.3 示例1.4 C語言示例1.5 代碼運行結果 二、反碼&#xff08;Ones Complement&#xff09;2.1 定義與表示2.2 歷史來源與作用2.3 示例2.4 C語言…

sentinel網關限流配置及使用

sentinel控制臺源碼&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制臺jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同環境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、網關限…

【LeetCode 0169】【摩爾投票算法】主元素

Majority Element Given an array nums of size n, return the majority element. The majority element is the element that appears more than ?n / 2? times. You may assume that the majority element always exists in the array. Example 1: **Input:** nums [3…

大數據信用查詢有哪些問題值得注意呢?

隨著大數據技術的不斷發展&#xff0c;大數據信用報告成為一種新型的信用風險檢測工具&#xff0c;被很多的銀行和機構廣泛用于信用風險評估&#xff0c;那大數據信用查詢有哪些問題值得注意呢?本文就帶大家一起去了解一下&#xff0c;希望對你有一定的幫助。 大數據信用查詢這…

JsonCPP源碼分析——分配器和配置器

1、allocator.h文件 該文件定義了一個分配器模版&#xff0c;該文件主要使用了內存對齊控制、rebind機制(C 標準庫的分配器接口要求提供 rebind 機制&#xff0c;以支持不同類型的分配)、::operator new、std::addressof等技術。 內存對齊控制&#xff1a;之所以先保存當前內存…

《C++ 入門:第一個小程序》

《C 入門&#xff1a;第一個小程序》 在學習 C 的旅程中&#xff0c;編寫第一個小程序是一個令人興奮的時刻。它就像打開一扇通往新編程世界的大門&#xff0c;讓我們初步領略 C 的魅力。 C 是一種強大而靈活的編程語言&#xff0c;廣泛應用于各種領域&#xff0c;從系統編程…

python 方向梯度直方圖(HOG)算法 【附兩種實現方法并可視化】

目錄 一、概述1.1 算法定義1.2 實現過程二、方法1(skimage庫)2.1 代碼實現2.2 結果示例三、方法2(cv2庫)3.1 代碼實現3.2 結果示例四、結果對比?? 結果預覽 一、概述 1.1 算法定義 方向梯度直方圖(Histogram of Oriented Gradient,HOG):是應用在計算機視覺和圖像處…

Telegram Bot、小程序開發(三)Mini Apps小程序

文章目錄 一、Telegram Mini Apps小程序二、小程序啟動方式三、小程序開發小程序調試模式初始化小程序Keyboard Button Mini Apps 鍵盤按鈕小程序【依賴具體用戶信息場景,推薦】**Inline Button Mini Apps內聯按鈕小程序**initData 的自動傳遞使用內聯菜單時候哪些參數會默認傳…

LLM微調

文章目錄 一. 常見微調分類1.1 全量微調&#xff08;FFT&#xff1a;Full Fine-tuning&#xff09;1.2 參數高效微調(PEFT&#xff1a;Parameter-Efficient Fine-Tuning)1.3 指令微調&#xff08;IFT&#xff1a;Instructional Fine-tuning&#xff09;1.3.1 Hard prompt1.3.2 …

Docker存儲目錄問題,如何修改Docker默認存儲位置?(Docker存儲路徑、Docker存儲空間)etc/docker/daemon.json

文章目錄 如何更改docker默認存儲路徑&#xff1f;版本1&#xff08;沒測試&#xff09;版本2&#xff08;可行&#xff09;1. 停止 Docker 服務&#xff1a;2. 創建新的存儲目錄&#xff1a;3. 修改 Docker 配置文件&#xff1a;4. 移動現有的 Docker 數據&#xff1a;5. 重新…

Java-svg格式的oss圖片鏈接轉換為png格式圖片字節流

一、引入依賴 <!--svg轉其他格式依賴--> <dependency><groupId>org.apache.xmlgraphics</groupId><artifactId>batik-transcoder</artifactId><version>1.14</version> </dependency> <dependency><groupId&g…

什么樣的服務器是合乎直銷網站標準

現在社會的發展,有著越來越多的人想要利用互聯網來做直銷。做好直銷行業系統解決方案離不開好的服務器支持,服務器的的穩定性和速度是直接影響網站后期運作,可以看做是網站的根基。 做網站直銷選擇租用服務器需要注意的幾點要素 一些大的直銷互聯網公司如安利、雅芳、康寶萊、玫…

【人工智能】自然語言處理(NLP)的突破,關注NLP在機器翻譯、情感分析、聊天機器人等方面的最新研究成果和應用案例。

自然語言處理&#xff08;NLP&#xff09;作為人工智能的一個重要分支&#xff0c;近年來取得了顯著的突破&#xff0c;特別在機器翻譯、情感分析、聊天機器人等領域取得了顯著的研究成果和廣泛的應用。以下是對這些領域最新研究成果和應用案例的概述&#xff0c;并附帶相應的代…

域名解析記錄與服務器源IP的探索

在互聯網中&#xff0c;域名和IP地址是進行網絡通信的基礎。用戶通常通過域名來訪問網站或服務&#xff0c;而實際的數據交換則發生在IP地址之間。域名解析&#xff08;DNS解析&#xff09;是將易于記憶的域名轉換為計算機可識別的IP地址的過程。本文將探討如何通過域名解析記錄…

Uniapp自定義動態加載組件(2024.7更新)

1.本次介紹如何使用uniapp實現自定義動態加載Loading的組件&#xff0c;可以gif格式&#xff0c;也可以mp4格式等; 編寫自定義Loading組件(CustomLoader.vue)&#xff1b;組件中含有“動態接收圖片路徑”&#xff0c;“10秒超時未false則自動斷開關閉Loading”&#xff1b;在全…