SpringBoot接收參數(shù)使用的注解實例講解
1.基本介紹
SpringBoot 接收客戶端提交數(shù)據(jù)/參數(shù)會使用到相關(guān)注解
詳 解 @PathVariable 、 @RequestHeader 、 @ModelAttribute 、 @RequestParam 、 @MatrixVariable、@CookieValue、@RequestBody
2.接收參數(shù)相關(guān)注解應用實例
1.需求: 演示各種方式提交數(shù)據(jù)/參數(shù)給服務器,服務器如何使用注解接收
2.應用實例演示
需求: 演示各種方式提交數(shù)據(jù)/參數(shù)給服務器,服務器如何使用注解接收

創(chuàng)建src\main\resources\static\index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>hello, llp</h1>
基本注解:
<hr/>
<a href="/monster/200/jack" rel="external nofollow" >@PathVariable-路徑變量 monster/200/jack</a><br/><br/>
</body>
</html>@PathVariable 使用
演示@PathVariable 使用,創(chuàng)建src\main\java\com\llp\springboot\controller\ParameterController.java, 完成測試
@RestController
public class ParameterController {
/**
* /monster/{id}/{name} 解讀
* 1. /monster/{id}/{name} 構(gòu)成完整請求路徑
* 2. {id} {name} 就是占位變量
* 3. @PathVariable("name"): 這里name 和{name} 命名保持一致
* 4. String name_ 這里自定義,和{name}命名無關(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 使用
演示@RequestHeader 使用,修改 ParameterController.java , 完成測試
√ 修改 index.html
<a href="/requestHeader" rel="external nofollow" >@RequestHeader-獲取Http請求頭 </a><br/><br/>
√ 修改 ParameterController.java
/**
* @RequestHeader("Host") 獲取http請求頭的 host信息
* @RequestHeader Map<String, String> header: 獲取到http請求的所有信息
*/
@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 使用
演示@RequestParam 使用,修改 ParameterController.java , 完成測試
√ 修改 index.html
<a href="/hi?name=wukong&fruit=apple&fruit=pear&id=300&address=北京" rel="external nofollow" >@RequestParam-獲取請求參數(shù)</a><br/><br/>
√ 修改 ParameterController.java
/**
* @param username wukong
* @param fruits List<String> fruits 接收集合 [apple, pear]
* @param paras Map<String, String> paras 如果我們希望將所有的請求參數(shù)的值都獲取到,
* 可以通過@RequestParam Map<String, String> paras這種方式
* 一次性的接收所有的請求參數(shù) {name=wukong, fruit=apple, id=300, address=北京}
* 如果接收的某個參數(shù)中有多個之值比如這里fruits是一個集合,從map中只能拿到一個
* 可以理解map底層會將相同的key的value值進行覆蓋
* @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 使用
演示@CookieValue 使用,修改 ParameterController.java , 完成測試
√ 修改 index.html
<a href="/cookie" rel="external nofollow" >@CookieValue-獲取cookie值</a><br/><br/>
√ 修改 ParameterController.java
/**
* 因為我的瀏覽器目前沒有cookie,我們可以自己設置cookie[技巧還是非常有用]
* 如果要測試,可以先寫一個方法,在瀏覽器創(chuàng)建對應的cookie
* 說明 1. value = "cookie_key" 表示接收名字為 cookie_key的cookie
* 2. 如果瀏覽器攜帶來對應的cookie , 那么 后面的參數(shù)是String ,則接收到的是對應對value
* 3. 后面的參數(shù)是Cookie ,則接收到的是封裝好的對應的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 使用
演示@RequestBody 使用,修改 ParameterController.java , 完成測試
√ 修改 index.html
<hr/>
<h1>測試@RequestBody獲取數(shù)據(jù): 獲取POST請求體</h1>
<form action="/save" method="post">
姓名: <input name="name"/> <br>
年齡: <input name="age"/> <br/>
<input type="submit" value="提交"/>
</form>
√ 修改 ParameterController.java
/**
* @RequestBody 是整體取出Post請求內(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 , 完成測試
√ 修改 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)鍵字,如果不適用則會走視圖解析器,這
//里視圖解析器前綴配置的是/ 后綴配置的.html ---> /ok.html
//而請求轉(zhuǎn)發(fā)在服務器端執(zhí)行,/被解析成 ip:port/工程路徑
//進而最終得到的完整路徑是 ip:port/工程路徑/ok.html
//但是我們這里希望訪問的是 ip:port/工程路徑/ok這個請求路徑
//因此這里手動的設置forward:/ok ,底層會根據(jù)我們設置的路徑進行請求轉(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("通過servlet api 獲取 username-" + request.getAttribute("user"));
System.out.println("website = " + website);
System.out.println("通過servlet api 獲取 website-"+request.getSession().getAttribute("website"));
return "success";
}
}
3.復雜參數(shù)
1.基本介紹
- 在開發(fā)中,SpringBoot 在響應客戶端請求時,也支持復雜參數(shù)
- Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus、 UriComponentsBuilder、ServletUriComponentsBuilder、HttpSession
- Map、Model 數(shù)據(jù)會被放在 request 域, 底層 request.setAttribute()
- RedirectAttributes 重定向攜帶數(shù)據(jù)
2.復雜參數(shù)應用實例
####1.說明 : 演示復雜參數(shù)的使用,重點: Map、Model、ServletResponse
2.代碼實現(xiàn)
//響應一個注冊請求
@GetMapping("/register")
public String register(Map<String,Object> map,
Model model,
HttpServletResponse response) {
//如果一個注冊請求,會將注冊數(shù)據(jù)封裝到map或者model
//map中的數(shù)據(jù)和model的數(shù)據(jù),會被放入到request域中
map.put("user","llp");
map.put("job","碼農(nóng)");
model.addAttribute("sal", 2500);
//一會我們再測試response使用
//我們演示創(chuàng)建cookie,并通過response 添加到瀏覽器/客戶端
Cookie cookie = new Cookie("email", "123@sohu.com");
response.addCookie(cookie);
//請求轉(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";
}
4.自定義對象參數(shù)-自動封裝
1.基本介紹
- 在開發(fā)中,SpringBoot 在響應客戶端請求時,也支持自定義對象參數(shù)
- 完成自動類型轉(zhuǎn)換與格式化
- 支持級聯(lián)封裝
2.自定義對象參數(shù)-應用實例
1.需求說明 : 演示自定義對象參數(shù)使用,完成自動封裝,類型轉(zhuǎn)換

2.代碼實現(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><h1>添加妖怪-坐騎[測試封裝 POJO;]</h1>
<form action="/savemonster" method="post">
編號: <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對象是monster的屬性,給對象屬性賦值時需要以對象名.字段名的方式-->
坐騎:<input name="car.name" value="法拉利"/><br/>
價格:<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ù)使用的注解實例講解的文章就介紹到這了,更多相關(guān)SpringBoot接收參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用IDEA創(chuàng)建SpringBoot項目的方法步驟
這篇文章主要介紹了使用IDEA創(chuàng)建SpringBoot項目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Java線程監(jiān)聽,意外退出線程后自動重啟的實現(xiàn)方法
下面小編就為大家?guī)硪黄狫ava線程監(jiān)聽,意外退出線程后自動重啟的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

