您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot接收參數(shù)使用的注解是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SpringBoot接收參數(shù)使用的注解是什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
SpringBoot 接收客戶端提交數(shù)據(jù)/參數(shù)會(huì)使用到相關(guān)注解
詳 解 @PathVariable 、 @RequestHeader 、 @ModelAttribute 、 @RequestParam 、 @MatrixVariable、@CookieValue、@RequestBody
1.需求: 演示各種方式提交數(shù)據(jù)/參數(shù)給服務(wù)器,服務(wù)器如何使用注解接收
2.應(yīng)用實(shí)例演示
需求: 演示各種方式提交數(shù)據(jù)/參數(shù)給服務(wù)器,服務(wù)器如何使用注解接收
創(chuàng)建src\main\resources\static\index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <h2>hello, llp</h2> 基本注解: <hr/> <a href="/monster/200/jack" rel="external nofollow" >@PathVariable-路徑變量 monster/200/jack</a><br/><br/> </body> </html>
演示@PathVariable 使用,創(chuàng)建src\main\java\com\llp\springboot\controller\ParameterController.java, 完成測(cè)試
@RestController public class ParameterController { /** * /monster/{id}/{name} 解讀 * 1. /monster/{id}/{name} 構(gòu)成完整請(qǐng)求路徑 * 2. {id} {name} 就是占位變量 * 3. @PathVariable("name"): 這里name 和{name} 命名保持一致 * 4. String name_ 這里自定義,和{name}命名無(wú)關(guān) * 5. @PathVariable Map<String, String> map 把所有傳遞的值傳入map * 6. 可以看下@PathVariable源碼 */ @GetMapping("/monster/{id}/{name}") public String pathVariable(@PathVariable("id") Integer id, @PathVariable("name") String name, @PathVariable Map<String, String> map) { System.out.println("id-" + id); System.out.println("name-" + name); System.out.println("map-" + map); return "success"; } }
演示@RequestHeader 使用,修改 ParameterController.java , 完成測(cè)試
√ 修改 index.html
<a href="/requestHeader" rel="external nofollow" >@RequestHeader-獲取Http請(qǐng)求頭 </a><br/><br/>
√ 修改 ParameterController.java
/** * @RequestHeader("Host") 獲取http請(qǐng)求頭的 host信息 * @RequestHeader Map<String, String> header: 獲取到http請(qǐng)求的所有信息 */ @GetMapping("/requestHeader") public String requestHeader(@RequestHeader("host") String host, @RequestHeader Map<String, String> header, @RequestHeader("accept") String accept) { System.out.println("host-" + host); System.out.println("header-" + header); System.out.println("accept-" + accept); return "success"; }
演示@RequestParam 使用,修改 ParameterController.java , 完成測(cè)試
√ 修改 index.html
<a href="/hi?name=wukong&fruit=apple&fruit=pear&id=300&address=北京" rel="external nofollow" >@RequestParam-獲取請(qǐng)求參數(shù)</a><br/><br/>
√ 修改 ParameterController.java
/** * @param username wukong * @param fruits List<String> fruits 接收集合 [apple, pear] * @param paras Map<String, String> paras 如果我們希望將所有的請(qǐng)求參數(shù)的值都獲取到, * 可以通過(guò)@RequestParam Map<String, String> paras這種方式 * 一次性的接收所有的請(qǐng)求參數(shù) {name=wukong, fruit=apple, id=300, address=北京} * 如果接收的某個(gè)參數(shù)中有多個(gè)之值比如這里fruits是一個(gè)集合,從map中只能拿到一個(gè) * 可以理解map底層會(huì)將相同的key的value值進(jìn)行覆蓋 * @return * @RequestParam */ @GetMapping("/hi") public String hi(@RequestParam(value = "name") String username, @RequestParam("fruit") List<String> fruits, @RequestParam Map<String, String> paras) { //username-wukong System.out.println("username-" + username); //fruit-[apple, pear] System.out.println("fruit-" + fruits); //paras-{name=wukong, fruit=apple, id=300, address=北京} System.out.println("paras-" + paras); return "success"; }
演示@CookieValue 使用,修改 ParameterController.java , 完成測(cè)試
√ 修改 index.html
<a href="/cookie" rel="external nofollow" >@CookieValue-獲取cookie值</a><br/><br/>
√ 修改 ParameterController.java
/** * 因?yàn)槲业臑g覽器目前沒(méi)有cookie,我們可以自己設(shè)置cookie[技巧還是非常有用] * 如果要測(cè)試,可以先寫(xiě)一個(gè)方法,在瀏覽器創(chuàng)建對(duì)應(yīng)的cookie * 說(shuō)明 1. value = "cookie_key" 表示接收名字為 cookie_key的cookie * 2. 如果瀏覽器攜帶來(lái)對(duì)應(yīng)的cookie , 那么 后面的參數(shù)是String ,則接收到的是對(duì)應(yīng)對(duì)value * 3. 后面的參數(shù)是Cookie ,則接收到的是封裝好的對(duì)應(yīng)的cookie */ @GetMapping("/cookie") public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value, HttpServletRequest request, @CookieValue(value = "username", required = false) Cookie cookie) { System.out.println("cookie_value-" + cookie_value); if (cookie != null) { System.out.println("username-" + cookie.getName() + "-" + cookie.getValue()); } System.out.println("-------------------------"); Cookie[] cookies = request.getCookies(); for (Cookie cookie1 : cookies) { System.out.println(cookie1.getName() + "=>" + cookie1.getValue()); } return "success"; }
演示@RequestBody 使用,修改 ParameterController.java , 完成測(cè)試
√ 修改 index.html
<hr/> <h2>測(cè)試@RequestBody獲取數(shù)據(jù): 獲取POST請(qǐng)求體</h2> <form action="/save" method="post"> 姓名: <input name="name"/> <br> 年齡: <input name="age"/> <br/> <input type="submit" value="提交"/> </form>
√ 修改 ParameterController.java
/** * @RequestBody 是整體取出Post請(qǐng)求內(nèi)容 */ @PostMapping("/save") public String postMethod(@RequestBody String content) { System.out.println("content-" + content); return "success"; }
@RequestAttribute 和 @SessionAttribute使用
演示@RequestAttribute @SessionAttribute使用,創(chuàng)建 com/hspedu/web/controller/RequestController.java , 完成測(cè)試
√ 修改 index.html
<a href="/login" rel="external nofollow" >@RequestAttribute、@SessionAttribute-獲取request域、session屬性-</a>
√ 創(chuàng)建 RequestController.java
@GetMapping("/login") public String login(HttpServletRequest request) { request.setAttribute("user", "llp"); //向session中添加數(shù)據(jù) request.getSession().setAttribute("website", "http://www.baidu.com"); //這里需要使用forward關(guān)鍵字,如果不適用則會(huì)走視圖解析器,這 //里視圖解析器前綴配置的是/ 后綴配置的.html ---> /ok.html //而請(qǐng)求轉(zhuǎn)發(fā)在服務(wù)器端執(zhí)行,/被解析成 ip:port/工程路徑 //進(jìn)而最終得到的完整路徑是 ip:port/工程路徑/ok.html //但是我們這里希望訪問(wèn)的是 ip:port/工程路徑/ok這個(gè)請(qǐng)求路徑 //因此這里手動(dòng)的設(shè)置forward:/ok ,底層會(huì)根據(jù)我們?cè)O(shè)置的路徑進(jìn)行請(qǐng)求轉(zhuǎn)發(fā) return "forward:/ok"; } @GetMapping("ok") //返回字符串,不走視圖解析器 @ResponseBody public String ok(@RequestAttribute(value = "user", required = false) String username, @SessionAttribute(value = "website",required = false) String website, HttpServletRequest request) { System.out.println("username= " + username); System.out.println("通過(guò)servlet api 獲取 username-" + request.getAttribute("user")); System.out.println("website = " + website); System.out.println("通過(guò)servlet api 獲取 website-"+request.getSession().getAttribute("website")); return "success"; } }
在開(kāi)發(fā)中,SpringBoot 在響應(yīng)客戶端請(qǐng)求時(shí),也支持復(fù)雜參數(shù)
Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus、 UriComponentsBuilder、ServletUriComponentsBuilder、HttpSession
Map、Model 數(shù)據(jù)會(huì)被放在 request 域, 底層 request.setAttribute()
RedirectAttributes 重定向攜帶數(shù)據(jù)
####1.說(shuō)明 : 演示復(fù)雜參數(shù)的使用,重點(diǎn): Map、Model、ServletResponse
2.代碼實(shí)現(xiàn)
//響應(yīng)一個(gè)注冊(cè)請(qǐng)求 @GetMapping("/register") public String register(Map<String,Object> map, Model model, HttpServletResponse response) { //如果一個(gè)注冊(cè)請(qǐng)求,會(huì)將注冊(cè)數(shù)據(jù)封裝到map或者model //map中的數(shù)據(jù)和model的數(shù)據(jù),會(huì)被放入到request域中 map.put("user","llp"); map.put("job","碼農(nóng)"); model.addAttribute("sal", 2500); //一會(huì)我們?cè)贉y(cè)試response使用 //我們演示創(chuàng)建cookie,并通過(guò)response 添加到瀏覽器/客戶端 Cookie cookie = new Cookie("email", "123@sohu.com"); response.addCookie(cookie); //請(qǐng)求轉(zhuǎn)發(fā) return "forward:/registerOk"; } @ResponseBody @GetMapping("/registerOk") public String registerOk(HttpServletRequest request) { System.out.println("user-" + request.getAttribute("user")); System.out.println("job-" + request.getAttribute("job")); System.out.println("sal-" + request.getAttribute("sal")); return "success"; }
在開(kāi)發(fā)中,SpringBoot 在響應(yīng)客戶端請(qǐng)求時(shí),也支持自定義對(duì)象參數(shù)
完成自動(dòng)類(lèi)型轉(zhuǎn)換與格式化
支持級(jí)聯(lián)封裝
1.需求說(shuō)明 : 演示自定義對(duì)象參數(shù)使用,完成自動(dòng)封裝,類(lèi)型轉(zhuǎn)換
2.代碼實(shí)現(xiàn)
1.創(chuàng)建src\main\resources\static\save.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加妖怪</title></head> <body><h2>添加妖怪-坐騎[測(cè)試封裝 POJO;]</h2> <form action="/savemonster" method="post"> 編號(hào): <input name="id" value="100"><br/> 姓名: <input name="name" value="牛魔王"/><br/> 年齡: <input name="age" value="120"/> <br/> 婚否: <input name="isMarried" value="true"/> <br/> 生日: <input name="birth" value="2000/11/11"/> <br/> <!--注意這里car對(duì)象是monster的屬性,給對(duì)象屬性賦值時(shí)需要以對(duì)象名.字段名的方式--> 坐騎:<input name="car.name" value="法拉利"/><br/> 價(jià)格:<input name="car.price" value="99999.9"/> <input type="submit" value="保存"/> </form> </body> </html>
2.修改src\main\java\com\llp\springboot\controller\ParameterController.java
@PostMapping("/savemonster") public String saveMonster(Monster monster) { System.out.println("monster= " + monster); return "success"; }
關(guān)于“SpringBoot接收參數(shù)使用的注解是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“SpringBoot接收參數(shù)使用的注解是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。