目錄
1.獲取參數(shù)
1.1獲取單個參數(shù)
1.2獲取多個參數(shù)
傳參注意事項:
2.獲取對象
?3.后端參數(shù)重命名@RequestParam
4.獲取JSON對象@RequestBody
5.從 URL 地址中獲取參數(shù) @PathVariable
6.上傳文件 @RequestPart
7.獲取Cookie/Session/Header
7.1 獲取 Request 和 Response 對象
7.2 獲取Cookie
(1)Servlet 獲取 Cookie 的方法
?(2)使用 @CookieValue 注解實現(xiàn) Cookie 的讀取
7.3 獲取Header(請求頭)中信息
(1)Servlet 獲取 Header 的方法
?(2)使用 @RequestHeader 注解實現(xiàn) Header 的獲取
7.4 存儲和獲取 Session
(1)Session 存儲和 Servlet 類似,是使? HttpServletRequest 中獲取的
(2)獲取 Session 方法1(Servlet 模式)
(3)獲取 Seesion 方法2:@SessionAttribute
1.獲取參數(shù)
1.1獲取單個參數(shù)
在 Spring MVC 中可以直接用方法中的參數(shù)來實現(xiàn)傳參:
@GetMapping("/hi") //等于@RequestMapping("/hi")
//都能實現(xiàn)映射的功能
public String sayHi(String name) {
return "Hi:" + name;
}
1.2獲取多個參數(shù)
@GetMapping("/hi") //等于@RequestMapping("/hi")
//都能實現(xiàn)映射的功能
public String sayHi(String name,Integer v) {
return "Hi:" + name + " v:" + v;
}
傳參注意事項:
在 Spring Boot(Spring MVC) 中傳參一定要傳包裝類型,而非基礎(chǔ)類型,否則傳一個空的值就會出錯, 并且這里的參數(shù)一定要和前端傳遞的參數(shù)名保持一致,否則就獲取不到參數(shù)的值了
2.獲取對象
并且Spring MVC可以自動實現(xiàn)參數(shù)對象的賦值,比如User對象;
@Data
public class User {
private int id;
private String name;
private int age;
//....
}
//普通對象
@GetMapping("/show-User")
public String showUser(User user){
return user.toString();
}
?
?3.后端參數(shù)重命名@RequestParam
有些特殊情況下,前端傳遞的參數(shù) key 和我們后端接收的 key 可以不一致,比如前端傳遞了一個 time 給后端,而后端又是用 createtime 字段來接收的,這樣就會出現(xiàn)參數(shù)接收不到的情況,如果出現(xiàn)這種情況,我們就可以使用 @RequestParam 來重命名前后端的參數(shù)值
@GetMapping("/show-Time")
public String showTime(@RequestParam("t") String startTime,
@RequestParam(value = "t2") String endTime){
return "開始時間:" + startTime +" 結(jié)束時間:" + endTime ;
}
?注意:
我們觀察@RequestParam源碼可以看到:
?這里代表如果使用@RequestParam的話,前端一定要傳遞參數(shù),否則就會報錯,但是如果我們在代碼中加入
就可以不用帶參數(shù)了
4.獲取JSON對象@RequestBody
服務(wù)器端實現(xiàn) JSON 數(shù)據(jù)的接收需要使用 @RequestBody 注解:
//接收json對象(和第三方系統(tǒng)通訊時常見的場景)
@PostMapping("/show-jsonUser")//@RequestBody指定的就是接受一個json對象,需要配合PostMapping來使用
public String showJsonUser(@RequestBody User user){
return user.toString();
}
5.從 URL 地址中獲取參數(shù) @PathVariable
6.上傳文件 @RequestPart
@RequestMapping("/upfile")
public String upfile(@RequestPart("myfile")MultipartFile file) throws IOException {
String path = "D:\\Desktop\\img.png";
//保存文件
file.transferTo(new File(path));
return path;
}
文件上傳我們使用這樣的方法的話就存在一個問題:我們傳輸文件的地址是固定的,當(dāng)李四傳輸了文件,張三再傳輸?shù)臅r候,李四傳輸?shù)奈募捅桓采w了
7.獲取Cookie/Session/Header
7.1 獲取 Request 和 Response 對象
@GetMapping("/getparam")
//HttpServletRequest req 是spring boot/spring MVC 內(nèi)置的,不用去傳,當(dāng)其項目啟動的時候就直接注入了,不用傳,本身就有
//HttpServletRespond 同樣也內(nèi)置了
public String getParam(HttpServletRequest req){
return req.getParameter("username");
}
7.2 獲取Cookie
(1)Servlet 獲取 Cookie 的方法
@RequestMapping("/getck")
public String getCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie item:cookies){
log.error(item.getName() + ":" + item.getValue());
}
return "get Cookie!";
}
?(2)使用 @CookieValue 注解實現(xiàn) Cookie 的讀取
@RequestMapping("/getck2")
public String getCookie2(@CookieValue("awen") String val){
return "Cookie value" + val;
}
這里我是手動在瀏覽器中加入Cookie信息的
7.3 獲取Header(請求頭)中信息
(1)Servlet 獲取 Header 的方法
@RequestMapping("/getUa")
public String gerUa(@RequestHeader("user-agent") String userAgent){
return userAgent;
}
?(2)使用 @RequestHeader 注解實現(xiàn) Header 的獲取
@RequestMapping("getua2")
public String getHead(@RequestHeader("User-Agent")String userAgent) {
return "header: " + userAgent;
}
7.4 存儲和獲取 Session
獲取session:
和servlet時代存session是一樣的,沒有注解
存session信息:
(1)Session 存儲和 Servlet 類似,是使? HttpServletRequest 中獲取的
@RequestMapping("/setsess")
//存session
public String setSession(HttpServletRequest request){
HttpSession session = request.getSession(true);
session.setAttribute("userinfo","userinfo");
return "Set Session Succeed";
}
(2)獲取 Session 方法1(Servlet 模式)
@RequestMapping("/getsess")
public String getSession(HttpServletRequest request){
HttpSession session = request.getSession(false);//一定要加false
if (session !=null && session.getAttribute("userinfo") != null){
return (String) session.getAttribute("userinfo");
}else {
return "暫無 Session 信息";
}
}
(3)獲取 Seesion 方法2:@SessionAttribute
@RequestMapping("getsess2")
//false 表示沒有這個session也行
public String getSession2(@SessionAttribute(value = "userinfo",required = false)String userinfo){
return userinfo;
}
我們觀測到@SessionAttribute的源碼中:
文章來源:http://www.zghlxwxcb.cn/news/detail-602456.html
意味著必須要有屬性,通常情況下需要添加 required = false ,如果不添加,那么當(dāng) session 中不存在此屬性的時候程序運行就會報錯文章來源地址http://www.zghlxwxcb.cn/news/detail-602456.html
到了這里,關(guān)于Spring MVC -- 獲取參數(shù)(普通對象+JSON對象+URL地址參數(shù)+文件+Cookie/Session/Header)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!