SpringBoot接收請求參數(shù)的四種方式總結
【方式一】原始方式
因為SpringBoot封裝了Servlet,所以也允許使用HttpServletRequest類中的方法來獲取
/** * 【方式一】原始方式 */ @RequestMapping("/demo01") public String demo01(HttpServletRequest request) { // 參數(shù)名要與頁面提交的參數(shù)名一致 String name = request.getParameter("name"); String age_str = request.getParameter("age"); // 接收到的數(shù)據(jù)都是String類型,想要int類型需要類型轉換 Integer age_int = Integer.parseInt(age_str); return "我叫" + name + ",今年" + age_int; }
使用postman發(fā)送:http://localhost:8080/demo01?name=張三&age=30,查看結果
【方式二】鍵值對
1、直接使用參數(shù)名(或別名)
springboot允許直接使用參數(shù)獲取,簡單優(yōu)雅;另外,還也可使用“@RequestParam”注解給參數(shù)設置別名,這樣頁面提交的參數(shù)名使用別名也能獲取到;
/** * 【方式二】1.直接使用參數(shù)名 */ @RequestMapping("/demo02") public String demo02(String name, Integer age) { return "我叫" + name + ",今年" + age; }
/** * 【方式二】1.直接使用別名 */ @RequestMapping("/demo02") // 可用@RequestParam給參數(shù)設置別名 public String demo02(@RequestParam(name="Name")String name, Integer age) { return "我叫" + name + ",今年" + age; }
2、對象數(shù)據(jù)
可以創(chuàng)建一個對象,將頁面提交的數(shù)據(jù)封裝成一個對象來接收;注意對象的屬性名要和頁面提交的參數(shù)名一致
/** * 人類 */ public class Person { /** * 姓名 */ private String name; /** * 年齡 */ private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
/** * 【方式二】2.對象數(shù)據(jù) */ @RequestMapping("/demo03") public String demo03(Person person) { return "我叫" + person.getName() + ",今年" + person.getAge(); }
3、數(shù)組/集合數(shù)據(jù)
(1)數(shù)組
/** * 【方式二】3.數(shù)組數(shù)據(jù) * @param hobby 數(shù)組名 */ @RequestMapping("/param04") public String param04(String[] hobby) { return Arrays.toString(hobby); }
(2)單獨接收集合數(shù)據(jù)需要加“@RequestParam”注解
/** * 【方式二】3.集合數(shù)據(jù) * @param hobby 集合名 */ @RequestMapping("/demo04") // 單獨接收集合數(shù)據(jù)需要加@RequestParam public String param04(@RequestParam List hobby) { return hobby.toString(); }
4、日期數(shù)據(jù)
/** * 【方式二】4.日期數(shù)據(jù) * @param time 參數(shù)名 */ @RequestMapping("/demo05") // 接收日期數(shù)據(jù)需要加@DateTimeFormat,并設置時間模板 public String demo05(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) { System.out.println(time.getClass()); return time.toString(); }
【方式三】json格式
創(chuàng)建兩個javaBean,Address類是User類的一個屬性
import com.fasterxml.jackson.annotation.JsonFormat; import java.time.LocalDateTime; import java.util.List; /** * 用戶類 */ public class User { private String username; private String password; private Integer age; private Double score; private Address address; // 時間格式屬性要加@JsonFormat注解,并可設置時間模板 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime time; // 集合作為一個javaBean的屬性時,不需要加@RequestParam注解 private List hobby; /* set()、get()、toString()方法 */ }
/** * 聯(lián)系地址 */ public class Address { private String phone; /* set()、get()、toString()方法 */ }
/** * 【方式三】json數(shù)據(jù) * @param user 用戶類 */ @RequestMapping("/demo06") public String demo06(@RequestBody User user){ // 打印user對象的內(nèi)容 System.out.println(user); return "success"; }
控制臺打印user對象內(nèi)容
小結
需要注意以下幾點:
(1)接收時間格式的數(shù)據(jù),屬性要加@JsonFormat注解;
(2)封裝json對象數(shù)據(jù),形參前面要加@RequestBody,表示將請求的json數(shù)據(jù)轉換成對象接收;
(3)使用postman發(fā)送json數(shù)據(jù),需要使用post提交方式;因為json數(shù)據(jù)要放在請求體中,get提交沒有請求體;
(4)這種接收方式,需要跟前面的【鍵值對】接收對象數(shù)據(jù)的方式區(qū)分開。
這種方式提交的json數(shù)據(jù),接收時需要加@RequestBody;前面【鍵值對】接收對象數(shù)據(jù)的方式,提交的是鍵值對數(shù)據(jù),接收時不需要加注解。
所以,如果發(fā)現(xiàn)頁面提交的數(shù)據(jù),程序接收不到,需要考慮是不是錯誤的把頁面提交的json數(shù)據(jù)當成是一個對象來接收了;反之,如果傳入的參數(shù)是鍵值對方式,用對象加@RequestBody注解來接收,也接收不到。
【方式四】路徑參數(shù)
路徑參數(shù),是指把數(shù)據(jù)附加在訪問的路徑后面,數(shù)據(jù)以“/”間隔。在程序中接收的時候,需要在映射的路徑后面給參數(shù)設置參數(shù)名,并在形參列表中使用@PathVariable()注解,將參數(shù)值傳給形參。
/** * 【方式四】路徑參數(shù) */ // 需要在路徑后面加{},{}內(nèi)寫別名,表明該位置的參數(shù)值傳給形參中的哪個變量 @RequestMapping("/demo07/{name}/{age}") public String demo07(@PathVariable("name") String name, @PathVariable("age") String age){ return "我叫" + name + ",今年" + age; }
總結
涉及到的Spring注解說明:
@RequestMapping:設置頁面訪問程序的路徑;
@RequestParam:用于給參數(shù)設置別名、單獨使用集合時;
@DateTimeFormat:用于單獨接收時間格式的數(shù)據(jù),格式化數(shù)據(jù);
@JsonFormat:接收json數(shù)據(jù)時,用于對象中需要格式化的數(shù)據(jù);
@RequestBody:接收json數(shù)據(jù)時,用于將請求的json數(shù)據(jù)轉換成對象接受;
@PathVariable:接收路徑參數(shù)時,用于將參數(shù)值傳分配給形參;
到此這篇關于SpringBoot接收請求參數(shù)的四種方式的文章就介紹到這了,更多相關SpringBoot接收請求參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot Admin之應用監(jiān)控與告警配置方式
這篇文章主要介紹了SpringBoot Admin之應用監(jiān)控與告警配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04Java實現(xiàn)給圖片添加圖片水印,文字水印及馬賽克的方法示例
這篇文章主要介紹了Java實現(xiàn)給圖片添加圖片水印,文字水印及馬賽克的方法,涉及java針對圖片的讀取、水印添加、馬賽克設置等相關操作技巧,需要的朋友可以參考下2018-01-01Java函數(shù)式編程(一):你好,Lambda表達式
這篇文章主要介紹了Java函數(shù)式編程(一):你好,Lambda表達式,本文講解了新老函數(shù)式編程的一些變化,需要的朋友可以參考下2014-09-09java 中動態(tài)代理(JDK,cglib)實例代碼
這篇文章主要介紹了java 中動態(tài)代理,這里介紹了JDK 動態(tài)代理與 cglib 動態(tài)代理的相關資料2017-04-04Reactor定制一個生產(chǎn)的WebClient實現(xiàn)示例
這篇文章主要為大家介紹了Reactor定制一個生產(chǎn)的WebClient實現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08