Spring?MVC各種參數(shù)進(jìn)行封裝的方法實(shí)例
一、簡單數(shù)據(jù)類型
在Servlet中我們通過 request.getParameter(name) 獲取請(qǐng)求參數(shù)。該方式存在兩個(gè)問題:
- 請(qǐng)求參數(shù)較多時(shí)會(huì)出現(xiàn)代碼冗余。
- 與容器緊耦合
而SpringMVC支持參數(shù)注入的方式用于獲取請(qǐng)求數(shù)據(jù),即將請(qǐng)求參數(shù)直接封裝到方法的參數(shù)當(dāng)中。用法如下:
1.1 控制器方法
// 獲取簡單類型參數(shù)
@RequestMapping("/c1/param1")
public void simpleParam(String username,int age){
System.out.println(username+" "+age);
}由于我們沒有配置對(duì)應(yīng)的param1頁面,這是直接在控制臺(tái)打印出訪問的參數(shù)是多少。 訪問該方法時(shí),請(qǐng)求參數(shù)名和方法參數(shù)名相同,即可完成自動(dòng)封裝。并在控制臺(tái)打印出來。執(zhí)行路徑為:http://localhost:8080/c1/param1?username=LYL&age=19
1.2 測試結(jié)果

OK,確實(shí)是在控制臺(tái)成功輸出了,說明封裝成功,接下來我們講一下對(duì)象類型。
二、對(duì)象類型
SpringMVC支持將參數(shù)直接封裝為對(duì)象,首先我們先新建一個(gè)學(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 單個(gè)對(duì)象
2.1.1 控制器方法
// 獲取對(duì)象類型參數(shù)
@RequestMapping("/c1/param2")
public void objParam(Student student){
System.out.println(student);
}可以知道,我們?cè)诳刂婆_(tái)是會(huì)打印出學(xué)生的具體信息的,
訪問路徑:http://localhost:8080/c1/param2?id=1&name=LYL&sex=man
2.1.2 測試結(jié)果

OK,確實(shí)是在控制臺(tái)打印出來了,說明我們對(duì)對(duì)象類型進(jìn)行封裝的時(shí)候,只需要將他們的屬性放在訪問路徑的參數(shù)里面即可
2.2 關(guān)聯(lián)對(duì)象
要實(shí)現(xiàn)關(guān)聯(lián)對(duì)象的封裝,首先我們得先建一個(gè)Address地址類,然后在Student類里面新增一個(gè)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;
// 地址對(duì)象
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)對(duì)象類型參數(shù)
@RequestMapping("c1/param3")
public void objParam2(Student student){
System.out.println(student);
}訪問該方法時(shí),請(qǐng)求參數(shù)名和方法參數(shù)的屬性名相同,即可完成自動(dòng)封裝。,因此我們可以將請(qǐng)求路徑寫成: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);
}從代碼可以看出這是訪問之后會(huì)在控制臺(tái)遍歷這個(gè)集合。
訪問路徑如下: http://localhost:8080/c/param4?users=LYL&users=HQX
3.1.2 測試結(jié)果

OK,確實(shí)成功在控制臺(tái)打印出來了。
3.2 對(duì)象數(shù)據(jù)類型集合
SpringMVC不支持將參數(shù)封裝為對(duì)象類型的List集合,但可以封裝到有List屬性的對(duì)象中。在這里我們得先在Student類添加一個(gè)集合對(duì)象。寫法如下:
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 控制器方法
// 對(duì)象中包含集合屬性
@RequestMapping("c1/param6")
public void listParam6(Student student){
System.out.println(student);
}其實(shí)和上面得對(duì)象類型沒什么不一樣,主要是參數(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屬性的對(duì)象中。修改Student實(shí)體類,寫法如下:
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 控制器方法
// 對(duì)象中包含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為什么為空是因?yàn)槲覍懮倭藗€(gè)']',所以才出現(xiàn)一丟丟小插曲,但是不影響我們繼續(xù)輸出。
總結(jié)
到此這篇關(guān)于Spring MVC各種參數(shù)進(jìn)行封裝的文章就介紹到這了,更多相關(guān)Spring MVC各種參數(shù)封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java判斷101-200之間有多少個(gè)素?cái)?shù)并輸出
這篇文章主要介紹了Java判斷101-200之間有多少個(gè)素?cái)?shù)并輸出,需要的朋友可以參考下2017-02-02
SpringCloud Feign配置應(yīng)用詳細(xì)介紹
這篇文章主要介紹了SpringCloud Feign配置應(yīng)用,feign是netflix提供的服務(wù)間基于http的rpc調(diào)用框架,在spring cloud得到廣泛應(yīng)用2022-09-09
Java枚舉類的規(guī)范設(shè)計(jì)與常見錯(cuò)誤規(guī)避指南
在Java開發(fā)中,枚舉(enum)是一種強(qiáng)大的工具,用于定義一組固定常量集合,然而,許多開發(fā)者在使用枚舉時(shí)容易陷入設(shè)計(jì)誤區(qū),導(dǎo)致代碼可維護(hù)性差、運(yùn)行時(shí)錯(cuò)誤頻發(fā),甚至引發(fā)生產(chǎn)事故,所以本文給大家介紹了Java枚舉類的規(guī)范設(shè)計(jì)與常見錯(cuò)誤規(guī)避,需要的朋友可以參考下2025-06-06
解析ConcurrentHashMap: 預(yù)熱(內(nèi)部一些小方法分析)
ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識(shí),一起看看吧2021-06-06
【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼
本篇文章主要介紹了【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法與對(duì)比
這篇文章主要為大家詳細(xì)介紹了SpringBoot中處理跨域資源的5種實(shí)現(xiàn)方法并進(jìn)行簡單對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
springboot整合jquery和bootstrap框架過程圖解
這篇文章主要介紹了springboot整合jquery和bootstrap框架過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

