@RequestAttribute和@RequestParam注解的區(qū)別及說(shuō)明
@RequestAttribute和@RequestParam注解區(qū)別
在寫(xiě)http接口的時(shí)候,發(fā)現(xiàn)接口參數(shù)有兩種注解,一種是@RequestAttribute,一種是@Requestparam,自己剛開(kāi)始沒(méi)明白區(qū)別,用postman調(diào)試的時(shí)候一直報(bào)錯(cuò),后來(lái)才發(fā)現(xiàn)這個(gè)問(wèn)題。
@RequestAttribute注解的參數(shù)在項(xiàng)目里是自己解析出來(lái)的,并不是前端傳遞的。具體一點(diǎn),在項(xiàng)目里的攔截器里會(huì)對(duì)Token信息進(jìn)行解析,解析出來(lái)的參數(shù)重新放在請(qǐng)求里(用httpServletRequest.setAttribute(name, value)),后邊接口接收參數(shù)時(shí)就用這個(gè)注解。
@RequestParam注解則表示這個(gè)參數(shù)是通過(guò)前端傳遞過(guò)來(lái)的,如果請(qǐng)求里沒(méi)有這個(gè)參數(shù),則會(huì)報(bào)錯(cuò)400 Bad Request。這個(gè)注解用來(lái)解析請(qǐng)求路徑里的參數(shù)(get請(qǐng)求)或者post請(qǐng)求中form表單格式的請(qǐng)求參數(shù);
@RequestBody注解用來(lái)接收POST請(qǐng)求BODY里的參數(shù),格式為JSON格式。
RequestAttribute、RequestBody、RequestHeader、RequestMethod、RequestParam和RequestPart
在Spring框架中,特別是在Spring MVC中,RequestAttribute
、RequestBody
、RequestHeader
、RequestMethod
、RequestParam
和RequestPart
等注解用于處理HTTP請(qǐng)求的不同部分,并幫助開(kāi)發(fā)者從請(qǐng)求中提取信息或綁定請(qǐng)求體到Java對(duì)象。
下面是對(duì)這些注解的詳細(xì)解釋:
RequestAttribute
@RequestAttribute
注解用于訪問(wèn)存儲(chǔ)在請(qǐng)求屬性中的值。
請(qǐng)求屬性是在請(qǐng)求處理過(guò)程中存儲(chǔ)在HttpServletRequest
對(duì)象中的鍵值對(duì)。
示例:
@GetMapping("/example") public String example(@RequestAttribute("attributeName") String value) { // 使用從請(qǐng)求屬性中獲取的值 return "ViewName"; }
RequestBody
@RequestBody
注解用于將請(qǐng)求體中的數(shù)據(jù)綁定到一個(gè)Java對(duì)象上。
這通常用于處理POST和PUT請(qǐng)求,其中請(qǐng)求體包含JSON或其他格式的數(shù)據(jù)。
示例:
@PostMapping("/create") public ResponseEntity<String> create(@RequestBody MyObject myObject) { // 使用從請(qǐng)求體中綁定的對(duì)象 return ResponseEntity.ok().body("Object created"); }
RequestHeader
@RequestHeader
注解用于訪問(wèn)HTTP請(qǐng)求頭中的值。
它允許你獲取特定請(qǐng)求頭的值,并將其綁定到方法的參數(shù)上。
示例:
@GetMapping("/header") public String header(@RequestHeader("User-Agent") String userAgent) { // 使用從請(qǐng)求頭中獲取的用戶代理字符串 return "ViewName"; }
RequestMethod
RequestMethod
不是一個(gè)注解,而是一個(gè)枚舉類型,用于表示HTTP請(qǐng)求的方法類型,如GET、POST、PUT、DELETE等。
它通常與@RequestMapping
注解一起使用,以指定方法應(yīng)該響應(yīng)哪種類型的請(qǐng)求。
示例:
@RequestMapping(value = "/update", method = RequestMethod.PUT) public ResponseEntity<String> update(...) { // 處理PUT請(qǐng)求 }
RequestParam
@RequestParam
注解用于從請(qǐng)求參數(shù)中綁定值到方法的參數(shù)。
它通常用于處理GET請(qǐng)求中的查詢參數(shù)。
示例:
@GetMapping("/search") public String search(@RequestParam String query) { // 使用從查詢參數(shù)中獲取的查詢字符串 return "ViewName"; }
RequestPart
@RequestPart
注解通常用于處理multipart/form-data
類型的請(qǐng)求,這種請(qǐng)求通常用于文件上傳。
它允許你訪問(wèn)請(qǐng)求中的某個(gè)部分,可以是文件或表單字段。
示例(文件上傳):
@PostMapping("/upload") public ResponseEntity<String> upload(@RequestPart("file") MultipartFile file) { // 處理文件上傳 return ResponseEntity.ok().body("File uploaded successfully"); }
這些注解使得開(kāi)發(fā)者能夠方便地處理HTTP請(qǐng)求的各個(gè)方面,從請(qǐng)求頭到請(qǐng)求體,再到查詢參數(shù)和請(qǐng)求屬性。它們減少了手動(dòng)解析和處理請(qǐng)求數(shù)據(jù)的需要,使得代碼更加簡(jiǎn)潔和易讀。同時(shí),通過(guò)使用這些注解,Spring MVC能夠自動(dòng)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換和校驗(yàn),進(jìn)一步簡(jiǎn)化了Web開(kāi)發(fā)的流程。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- @RequestParam注解加與不加有什么區(qū)別
- 基于params、@PathVariabl和@RequestParam的用法與區(qū)別說(shuō)明
- 基于@RequestParam name和value屬性的區(qū)別
- @RequestBody,@RequestParam和@Param的區(qū)別說(shuō)明
- 方法參數(shù)屬性params,@PathVariable和@RequestParam用法及區(qū)別
- @PathVariable、@RequestParam和@RequestBody的區(qū)別
- @RequestParam?和@RequestBody注解的區(qū)別解析
- Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解
- Spring中@PathVariable和@RequestParam注解的用法區(qū)別
- SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解
- springMVC中@RequestParam和@RequestPart的區(qū)別
相關(guān)文章
java 注解annotation的使用以及反射如何獲取注解
這篇文章主要介紹了java 注解annotation的使用以及反射如何獲取注解的相關(guān)資料,需要的朋友可以參考下2017-01-01Java線程間協(xié)作wait、notify和notifyAll詳解
這篇文章主要介紹了Java線程間協(xié)作wait、notify和notifyAll詳解,在 Java 中可以用 wait、notify 和 notifyAll 來(lái)實(shí)現(xiàn)線程間的通信,盡管關(guān)于wait和notify的概念很基礎(chǔ),它們也都是Object類的函數(shù),但用它們來(lái)寫(xiě)代碼卻并不簡(jiǎn)單,,需要的朋友可以參考下2023-10-10常用Maven庫(kù),鏡像庫(kù)及maven/gradle配置(小結(jié))
這篇文章主要介紹了常用Maven庫(kù),鏡像庫(kù)及maven/gradle配置(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12mybatis實(shí)現(xiàn)批量修改-xml方式
這篇文章主要介紹了mybatis實(shí)現(xiàn)批量修改-xml方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題(推薦)
這篇文章主要介紹了SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題,本文給大家介紹的非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解
這篇文章主要介紹了java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解,隊(duì)列,是一種數(shù)據(jù)結(jié)構(gòu),除了優(yōu)先級(jí)隊(duì)列和LIFO隊(duì)列外,隊(duì)列都是以FIFO(先進(jìn)先出)的方式對(duì)各個(gè)元素進(jìn)行排序的,需要的朋友可以參考下2024-01-01Intellij IDEA基于Springboot的遠(yuǎn)程調(diào)試(圖文)
這篇文章主要介紹了Intellij IDEA基于Springboot的遠(yuǎn)程調(diào)試(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10一篇文章告訴你如何在Java數(shù)組中插入一個(gè)字符
本篇文章主要介紹了Java數(shù)組中插入一個(gè)字符的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-10-10spring boot攔截器的使用場(chǎng)景示例詳解
這篇文章主要給大家介紹了關(guān)于spring boot攔截器的使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05