詳解Spring?Boot接收參數(shù)的19種方式
SpringBoot接受參數(shù)相關
@PathVariable注解
使用場景:解析占位變量
url:/monster/{id}/{name} —> /monster/king/100
與@RequestParam的區(qū)別是沒有參數(shù)名
/** * /monster/{id}/{name} 解讀 * 1. /monster/{id}/{name} 構成完整請求路徑 * 2. {id} {name} 就是占位變量 * 3. @PathVariable("name"): 這里name 和{name} 命名保持一致,與注解內(nèi)的name一致 * 4. String name_ 這里自定義,老師故意這樣寫下 * 5. @PathVariable Map<String, String> map 把所有傳遞的值傳入map * map = {name=king, id=100} * 6. 可以看下@PathVariable源碼 */ @GetMapping("/monster/{name}/{id}") public String pathVariable(@PathVariable("name")String name_, @PathVariable("id")Integer id, @PathVariable Map<String,String> map){ System.out.println("name = " + name); System.out.println("id = " + id); System.out.println("map = " + map); return "success"; }
@RequestHeader注解
使用場景:解析請求頭信息
/** * * 解讀: * 1.@RequestHeader獲取請求頭信息 * 2,@RequestHeader("Host") String host:獲取請求頭host的信息 * 2.1 @RequestHeader("Host"),@RequestHeader中的value值大小寫無差別 * 2.2 String host:名字程序員自定義 * 3.@RequestHeader Map<String,String> header:獲取到http請求頭的所有信息 * @param host * @param header * @return */ @RequestMapping("/requestHeader") public String requestHeader(@RequestHeader("Host") String host, @RequestHeader Map<String,String> header){ System.out.println("host = " + host); System.out.println("header = " + header); return "success"; }
@RequestParam注解
使用場景:獲取請求參數(shù)信息
/** * * 內(nèi)容:@RequestParam:獲取請求參數(shù) * 解讀: * 1.@RequestParam(value = "name",required = true) String username * 1.1 @RequestParam(value = "name":獲取參數(shù)名為name的值 * 1.2 required = true,不允許不傳入該屬性的值,即可以不填寫該屬性會報錯 * required = false,即使沒有傳入該屬性,也不會報錯,值為null * 2.@RequestParam("fruit")List<String>fruits:當一個屬性有多個值的時候用List數(shù)組接收 * 3.@RequestParam Map<String,String> paras:可以用Map集合接收所有數(shù)據(jù) * 注意:這樣寫有一個小問題,當一個值為數(shù)組類型(有多個數(shù)據(jù)的時候),只能接收第一個數(shù)據(jù) * 原因:因為Map的泛型為<String,String>,獲取的值是唯一的,不能接收數(shù)組或集合類型 * @param username * @param fruits * @return */ @RequestMapping("/requestParam") public String requestParam(@RequestParam(value = "name",required = true) String username, @RequestParam("fruit")List<String>fruits, @RequestParam Map<String,String> paras){ System.out.println("username = " + username); System.out.println("fruits = " + fruits); System.out.println("paras = " + paras); return "success"; }
SpringMVC自動封裝參數(shù)對象
/** * 將獲取到的數(shù)據(jù)封裝成對象 * 解讀: * 1.方法的形參用對應的類型來指定即可,SpringMVC會自動進行封裝 * 2.如果是自動完成封裝,則需要提交的數(shù)據(jù)-參數(shù)名與對象的字段名保持一致 * 3.如果屬性是對象,我們通過字段名.字段名的方式提交數(shù)據(jù) * 例如Master[pet],提交的數(shù)據(jù)名應該是 pet.id,pet.name等等【級聯(lián)操作】 * 4.如果提交數(shù)據(jù)的參數(shù)名和對象的字段名不匹配,則對象的屬性值為null */ @RequestMapping("/vote03") public String getPojoObject(Master master){ System.out.println("master = " + master); return "success"; }
@RequestBody
使用場景:前端傳來的是json數(shù)據(jù)
/** * 1.@RequestBody User user在形參制定了@RequestBody注解 * 2.springmvc就會將交提交的json字符串數(shù)據(jù)轉換成指定的javabean * 3.注意:前后端的屬性值應該匹配,否則會返回空 * 4.如果沒有@RequestBody修飾,該屬性的前后端的值都為空。 * @param user * @return */ @ResponseBody @RequestMapping("json/user") public User UserHandler(@RequestBody User user) { //接收前臺傳入的json數(shù)據(jù),并以json的格式傳回瀏覽器 System.out.println("user = " + user); return user; }
@CookieValue
使用場景:獲取cookie數(shù)據(jù)
/** * 內(nèi)容:獲取cookie數(shù)據(jù) * 解讀: * 1.配置環(huán)境:我們在瀏覽器自己添加cookie,右鍵檢查,在存儲中添加(也可能在application) * 2.@CookieValue(value = "cookie_key",required = false) String cookie_value * 2.1 獲取名字為cookie_key的Cookie的value值 * 2.2 String cookie_value,如果注解修飾的類型為String,則獲取的是Cookie對應的value值 * 3.@CookieValue(value = "username",required = false)Cookie userCookie) * 3.1 獲取名字為username的Cookie對象 * 3.2 Cookie userCookie,如果注解修飾的類型為Cookie,則獲取的是Cookie對象 * 4.required = false:參數(shù)是否必須傳入,同@RequestParam * 5.也可以通過HttpServletRequest獲取cookie * @param cookie_value * @param userCookie * @return */ @RequestMapping("/cookieValue") public String cookieValue(@CookieValue(value = "cookie_key",required = false) String cookie_value, @CookieValue(value = "username",required = false)Cookie userCookie, HttpServletRequest request){ System.out.println("cookie_value = " + cookie_value); System.out.println("userCookie = " + userCookie); System.out.println("userCookie.getName() = " + userCookie.getName()); System.out.println("userCookie.getValue() = " + userCookie.getValue()); Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { System.out.println("cookie = " + cookie); } return "success"; }
級聯(lián)操作
應用場景:對象的屬性是另一個對象的實例
/** * 將獲取到的數(shù)據(jù)封裝成對象 * 解讀: * 1.方法的形參用對應的類型來指定即可,SpringMVC會自動進行封裝 * 2.如果是自動完成封裝,則需要提交的數(shù)據(jù)-參數(shù)名與對象的字段名保持一致 * 3.如果屬性是對象,我們通過字段名.字段名的方式提交數(shù)據(jù) * 例如Master[pet],提交的數(shù)據(jù)名應該是 pet.id,pet.name等等【級聯(lián)操作】 * 4.如果提交數(shù)據(jù)的參數(shù)名和對象的字段名不匹配,則對象的屬性值為null */ @RequestMapping("/vote03") public String getPojoObject(Master master){ System.out.println("master = " + master); return "success"; }
到此這篇關于Spring Boot接收參數(shù)的19種方式的文章就介紹到這了,更多相關Spring Boot接收參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot3整合knife4j詳細圖文教程(swagger增強)
開發(fā)api提供對應的接口規(guī)范進行聯(lián)調或并行開發(fā),api文檔管理必不可少,常用的Knife4j基于swagger(依賴已經(jīng)compile),可以進行管理,下面這篇文章主要給大家介紹了關于springboot3整合knife4j的相關資料,需要的朋友可以參考下2024-03-03SpringBoot使用Sa-Token實現(xiàn)賬號封禁、分類封禁、階梯封禁的示例代碼
本文主要介紹了SpringBoot使用Sa-Token實現(xiàn)賬號封禁、分類封禁、階梯封禁的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07springboot新建項目pom.xml文件第一行報錯的解決
這篇文章主要介紹了springboot新建項目pom.xml文件第一行報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot 使用Mybatis分頁插件實現(xiàn)詳解
這篇文章主要介紹了SpringBoot 使用Mybatis分頁插件實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10SpringBoot的@EnableAsync和@Async注解分析
這篇文章主要介紹了SpringBoot的@EnableAsync和@Async注解分析,Spring Boot是一個快速開發(fā)框架,可以幫助開發(fā)人員快速構建基于Spring的應用程序,需要的朋友可以參考下2023-07-07解決程序包org.springframework.test.context不存在
這篇文章主要介紹了解決程序包org.springframework.test.context不存在的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09