Spring?MVC各種參數(shù)進行封裝的方法實例
一、簡單數(shù)據(jù)類型
在Servlet中我們通過 request.getParameter(name) 獲取請求參數(shù)。該方式存在兩個問題:
- 請求參數(shù)較多時會出現(xiàn)代碼冗余。
- 與容器緊耦合
而SpringMVC支持參數(shù)注入的方式用于獲取請求數(shù)據(jù),即將請求參數(shù)直接封裝到方法的參數(shù)當(dāng)中。用法如下:
1.1 控制器方法
// 獲取簡單類型參數(shù) @RequestMapping("/c1/param1") public void simpleParam(String username,int age){ System.out.println(username+" "+age); }
由于我們沒有配置對應(yīng)的param1頁面,這是直接在控制臺打印出訪問的參數(shù)是多少。 訪問該方法時,請求參數(shù)名和方法參數(shù)名相同,即可完成自動封裝。并在控制臺打印出來。執(zhí)行路徑為:http://localhost:8080/c1/param1?username=LYL&age=19
1.2 測試結(jié)果
OK,確實是在控制臺成功輸出了,說明封裝成功,接下來我們講一下對象類型。
二、對象類型
SpringMVC支持將參數(shù)直接封裝為對象,首先我們先新建一個學(xué)生類。如下:
Student
package com.example.domain; public class Student { private int id; private String name; private String sex; public Student() { } public Student(int id, String name, String sex) { this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Student[ " + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + " ]"; } }
2.1 單個對象
2.1.1 控制器方法
// 獲取對象類型參數(shù) @RequestMapping("/c1/param2") public void objParam(Student student){ System.out.println(student); }
可以知道,我們在控制臺是會打印出學(xué)生的具體信息的,
訪問路徑:http://localhost:8080/c1/param2?id=1&name=LYL&sex=man
2.1.2 測試結(jié)果
OK,確實是在控制臺打印出來了,說明我們對對象類型進行封裝的時候,只需要將他們的屬性放在訪問路徑的參數(shù)里面即可
2.2 關(guān)聯(lián)對象
要實現(xiàn)關(guān)聯(lián)對象的封裝,首先我們得先建一個Address地址類,然后在Student類里面新增一個Address類型的屬性即可。如下:
Address:
package com.example.domain; public class Address { // 地址信息 private String info; // 郵編 private String postcode; public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public String getPostcode() { return postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } @Override public String toString() { return "Address[ " + "info='" + info + '\'' + ", postcode='" + postcode + '\'' + " ]"; } }
記住修改Student類,如下:
package com.example.domain; import java.util.List; import java.util.Map; public class Student { private int id; private String name; private String sex; // 地址對象 private Address address; public Student() { } public Student(int id, String name, String sex) { this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "Student[ " + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + " ]"; } }
2.2.1 控制器方法
// 獲取關(guān)聯(lián)對象類型參數(shù) @RequestMapping("c1/param3") public void objParam2(Student student){ System.out.println(student); }
訪問該方法時,請求參數(shù)名和方法參數(shù)的屬性名相同,即可完成自動封裝。,因此我們可以將請求路徑寫成:http://localhost:8080/c1/param3?id=1&name=HQX&sex=woman&address.info=guangzhou&address.postcode=5201314
2.2.2 測試結(jié)果
OK,可以很明顯看到也是可以成功查詢出來了。
三、集合類型
SpringMVC支持將參數(shù)封裝為List或Map集合,下面演示一下封裝為簡單數(shù)據(jù)類型集合的寫法。如下:
3.1 簡單數(shù)據(jù)類型集合
3.1.1 控制方法
// 綁定簡單數(shù)據(jù)類型List參數(shù),參數(shù)前必須添加@RequestParam注解 @RequestMapping("/c/param4") public void listParam(@RequestParam List<String> users){ users.forEach(System.out::println); }
從代碼可以看出這是訪問之后會在控制臺遍歷這個集合。
訪問路徑如下: http://localhost:8080/c/param4?users=LYL&users=HQX
3.1.2 測試結(jié)果
OK,確實成功在控制臺打印出來了。
3.2 對象數(shù)據(jù)類型集合
SpringMVC不支持將參數(shù)封裝為對象類型的List集合,但可以封裝到有List屬性的對象中。在這里我們得先在Student類添加一個集合對象。寫法如下:
Student
package com.example.domain; import java.util.List; import java.util.Map; public class Student { private int id; private String name; private String sex; // 地址集合List private List<Address> address; public Student() { } public Student(int id, String name, String sex) { this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public List<Address> getAddress() { return address; } public void setAddress(List<Address> address) { this.address = address; } @Override public String toString() { return "Student[ " + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + " ]"; } }
3.2.1 控制器方法
// 對象中包含集合屬性 @RequestMapping("c1/param6") public void listParam6(Student student){ System.out.println(student); }
其實和上面得對象類型沒什么不一樣,主要是參數(shù)類型得屬性不一樣,訪問路徑不一樣。
訪問路徑:http://localhost:8080/c1/param6?id=1&name=LYL&sex=man&address[0].info=HQX&address[0].postcode=520&address[1].info=MVC&address[1].postcode=1314
3.2.2 測試結(jié)果
OK,也是可以成功查詢出來的
3.3 Map集合
同樣,SpringMVC要封裝Map集合,需要封裝到有Map屬性的對象中。修改Student實體類,寫法如下:
Student
package com.example.domain; import java.util.List; import java.util.Map; public class Student { private int id; private String name; private String sex; // 地址集合Map private Map<String,Address> address; public Student() { } public Student(int id, String name, String sex) { this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Map<String, Address> getAddress() { return address; } public void setAddress(Map<String, Address> address) { this.address = address; } @Override public String toString() { return "Student[ " + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + " ]"; } }
3.3.1 控制器方法
// 對象中包含Map屬性 @RequestMapping("c1/param7") public void mapParam(Student student){ System.out.println(student); }
訪問路徑:
http://localhost:8080/c1/param7?id=1&name=LYL&sex=man&address[%27one%27].info=H&address[%27one%27].postcode=520&address[%27two%27].info=QX&address[%27two%27].postcode=1314]
3.3.2 測試結(jié)果
OK,也是成功查出來了,至于第一條的two的info為什么為空是因為我寫少了個']',所以才出現(xiàn)一丟丟小插曲,但是不影響我們繼續(xù)輸出。
總結(jié)
到此這篇關(guān)于Spring MVC各種參數(shù)進行封裝的文章就介紹到這了,更多相關(guān)Spring MVC各種參數(shù)封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@Bean注解和@Configuration、@Component注解組合使用的區(qū)別
這篇文章主要介紹了@Bean注解和@Configuration、@Component注解組合使用的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Spring中自定義數(shù)據(jù)類型轉(zhuǎn)換的方法詳解
Spring3引入了一個core.onvert包,提供一個通用類型轉(zhuǎn)換系統(tǒng)。在Spring容器中,可以使用這個系統(tǒng)作為PropertyEditor實現(xiàn)的替代,將外部化的bean屬性值字符串轉(zhuǎn)換為所需的屬性類型。本文將詳解這一系統(tǒng)的使用方法,需要的可以參考一下2022-06-06Springboot整合mybatisplus的項目實戰(zhàn)
本文主要介紹了Springboot整合mybatisplus的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06