Java Spring MVC獲取請求數(shù)據(jù)詳解操作
1. 獲得請求參數(shù)
- 客戶端請求參數(shù)的格式是:
name=value&name=value… … - 服務器端要獲得請求的參數(shù),有時還需要進行數(shù)據(jù)的封裝,SpringMVC可以接收如下類型的參數(shù):
- 基本類型參數(shù)
- POJO類型參數(shù)
- 數(shù)組類型參數(shù)
- 集合類型參數(shù)
2. 獲得基本類型參數(shù)
- Controller中的業(yè)務方法的參數(shù)名稱要與請求參數(shù)的name一致,參數(shù)值會自動映射匹配。

- 訪問:
http://localhost:8080/xdr630_spring_mvc_war_exploded/user/quick11?username=xdr&age=23
- 控制臺打印輸出:

3. 獲得POJO類型參數(shù)
Controller中的業(yè)務方法的POJO參數(shù)的屬性名與請求參數(shù)的name一致,參數(shù)值會自動映射匹配。



4. 獲得數(shù)組類型參數(shù)
Controller中的業(yè)務方法數(shù)組名稱與請求參數(shù)的name一致,參數(shù)值會自動映射匹配。



5. 獲得集合類型參數(shù)
- 獲得集合參數(shù)時,要將集合參數(shù)包裝到一個
POJO中才可以。 - 把集合包裝到 POJO 對象當中
- 創(chuàng)建 VO (valueobject),封裝視圖的對象
public class VO {
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "VO{" +
"userList=" + userList +
'}';
}
}
- 創(chuàng)建jsp表單
<form action="${pageContext.request.contextPath}/user/quick14" method="post">
<%--表明是第幾個User對象的username age--%>
<input type="text" name="userList[0].username"><br>
<input type="text" name="userList[0].age"><br>
<input type="text" name="userList[1].username"><br>
<input type="text" name="userList[1].age"><br>
<input type="submit" value="提交">
</form>



- 當使用ajax提交時,可以指定
contentType為json形式,那么在方法參數(shù)位置使用@RequestBody可以直接接收集合數(shù)據(jù)而無需使用POJO進行包裝。 - 創(chuàng)建 ajax.jsp
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
<script>
var userList = new Array();
userList.push({username:"zhangsan",age:18});
userList.push({username:"lisi",age:28});
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/user/quick15",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8"
});
</script>
- 加入配置文件
<!--開放對資源的訪問權限--> <mvc:resources mapping="/js/**" location="/js/"/>
或
- 把原始的數(shù)據(jù)交給 Tomcat 找到資源
<mvc:default-servlet-handler/>



- 注意:通過谷歌開發(fā)者工具抓包發(fā)現(xiàn),沒有加載到jquery文件,原因是SpringMVC的前端控制器DispatcherServlet的
url-pattern配置的是/,代表對所有的資源都進行過濾操作,可以通過以下兩種方式指定放行靜態(tài)資源: - 在
spring-mvc.xml配置文件中指定放行的資源
<mvc:resources mapping="/js/**" location="/js/"/> 或 <mvc:default-servlet-handler/>
6. 請求數(shù)據(jù)亂碼問題
當post請求時,數(shù)據(jù)會出現(xiàn)亂碼,可以設置一個過濾器來進行編碼的過濾。



<!--配置全局過濾的filter-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
再次運行:

7. 參數(shù)綁定注解 @requestParam



- 當給的參數(shù)名與請求的參數(shù)名不一致時就為
null


- 這個時候就需要使用 @RequestParameter
- 當請求的參數(shù)名稱與
Controller的業(yè)務方法參數(shù)名稱不一致時,就需要通過@RequestParam注解顯示的綁定。 - 將請求的
name參數(shù)映射到username參數(shù)上



注解@RequestParam還有如下參數(shù)可以使用:
value:與請求參數(shù)名稱required:此在指定的請求參數(shù)是否必須包括,默認是true,提交時如果沒有此參數(shù)則報錯





defaultValue:當沒有指定請求參數(shù)時,則使用指定的默認值賦值



8. 獲得Restful風格的參數(shù)
Restful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。主要用于客戶端和服務器交互類的軟件,基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現(xiàn)緩存機制等。
Restful風格的請求是使用“url+請求方式”表示一次請求目的的,HTTP 協(xié)議里面四個表示操作方式的動詞如下:
-
GET:用于獲取資源 POST:用于新建資源PUT:用于更新資源DELETE:用于刪除資源
例如:

上述url地址/user/1中的1就是要獲得的請求參數(shù),在SpringMVC中可以使用占位符進行參數(shù)綁定。地址/user/1可以寫成/user/{id},占位符{id}對應的就是1的值。在業(yè)務方法中我們可以使用@PathVariable注解進行占位符的匹配獲取工作。

訪問:


9. 自定義類型轉換器
- SpringMVC 默認已經提供了一些常用的類型轉換器,例如客戶端提交的字符串轉換成
int型進行參數(shù)設置。 - 但是不是所有的數(shù)據(jù)類型都提供了轉換器,沒有提供的就需要自定義轉換器,例如:日期類型的數(shù)據(jù)就需要自定義轉換器。
- 時間格式不匹配


- 自定義類型轉換器的開發(fā)步驟:
1.定義轉換器類實現(xiàn)Converter接口

public class DateConverter implements Converter<String,Date> {
@Override
public Date convert(String dataStr) {
//將日期的字符串轉成日期對象 返回
Date date = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM:dd");
try {
date = format.parse(dataStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date ;
}
}
2.在配置文件中聲明轉換器
<!--聲明轉換器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.xdr630.coverter.DateConverter"></bean>
</list>
</property>
</bean>
3.在<annotation-driven>中引用轉換器
<!--mvc注解驅動--> <mvc:annotation-driven conversion-service="conversionService"/>
再次訪問:

控制臺查看:

10. 獲得Servlet相關API
SpringMVC支持使用原始ServletAPI對象作為控制器方法的參數(shù)進行注入,常用的對象如下:
- HttpServletRequest
- HttpServletResponse
- HttpSession



11. 獲得請求頭
11.1 @RequestHeader
使用@RequestHeader可以獲得請求頭信息,相當于web階段學習的request.getHeader(name)
@RequestHeader注解的屬性如下:
value:請求頭的名稱required:是否必須攜帶此請求頭


控制臺:

11.2 @CookieValue
使用@CookieValue可以獲得指定Cookie的值
@CookieValue注解的屬性如下:
value:指定cookie的名稱required:是否必須攜帶此cookie



控制臺:

12. 文件上傳
12.1 文件上傳客戶端三要素
- 表單項
type=“file” - 表單的提交方式是
post - 表單的
enctype屬性是多部分表單形式,及enctype=“multipart/form-data”


12.2 文件上傳原理
- 當form表單修改為多部分表單時,
request.getParameter()將失效。 enctype=“application/x-www-form-urlencoded”時,form表單的正文內容格式是:key=value&key=value&key=value- 當form表單的
enctype取值為Mutilpart/form-data時,請求正文內容就變成多部分形式:

12.3 單文件上傳步驟
1.導入fileupload和io坐標
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
2.配置文件上傳解析器
<!--配置文件上傳解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上傳文件總大小-->
<property name="maxUploadSize" value="5242800"/>
<!--上傳單個文件的大小-->
<property name="maxUploadSizePerFile" value="5242800"/>
<!--上傳文件的編碼類型-->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
3.編寫文件上傳代碼

測試:

控制臺:

把文件進行保存




控制臺:

查看保存的路徑

12.4 多文件上傳實現(xiàn)
多文件上傳,只需要將頁面修改為多個文件上傳項,將方法參數(shù)MultipartFile類型修改為MultipartFile[]即可





13. 知識要點
MVC實現(xiàn)數(shù)據(jù)請求方式
- 基本類型參數(shù)
- POJO類型參數(shù)
- 數(shù)組類型參數(shù)
- 集合類型參數(shù)
MVC獲取數(shù)據(jù)細節(jié)
- 中文亂碼問題
- @RequestParam 和 @PathVariable
- 自定義類型轉換器
- 獲得Servlet相關API
- @RequestHeader 和 @CookieValue
- 文件上傳
到此這篇關于Java Spring MVC獲取請求數(shù)據(jù)詳解操作的文章就介紹到這了,更多相關Java Spring MVC 獲取請求數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Springboot啟動報錯:類文件具有錯誤的版本61.0,應為?52.0
這篇文章主要給大家介紹了關于解決Springboot啟動報錯:類文件具有錯誤的版本?61.0,應為?52.0的相關資料,這是查閱了網上的很多資料才解決的,分享給大家,需要的朋友可以參考下2023-01-01
mybatis Mapper的xml文件中resultType值的使用說明
這篇文章主要介紹了mybatis Mapper的xml文件中resultType值的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

