Java Spring MVC獲取請求數據詳解操作

1. 獲得請求參數

  1. 客戶端請求參數的格式是:name=value&name=value… …
  2. 服務器端要獲得請求的參數,有時還需要進行數據的封裝,SpringMVC可以接收如下類型的參數:
  • 基本類型參數
  • POJO類型參數
  • 數組類型參數
  • 集合類型參數

2. 獲得基本類型參數

  • Controller中的業務方法的參數名稱要與請求參數的name一致,參數值會自動映射匹配。

在這裡插入圖片描述

  • 訪問:

http://localhost:8080/xdr630_spring_mvc_war_exploded/user/quick11?username=xdr&age=23

  • 控制臺打印輸出:

在這裡插入圖片描述

3. 獲得POJO類型參數

Controller中的業務方法的POJO參數的屬性名與請求參數的name一致,參數值會自動映射匹配。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

4. 獲得數組類型參數

Controller中的業務方法數組名稱與請求參數的name一致,參數值會自動映射匹配。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

5. 獲得集合類型參數

獲得集合參數時,要將集合參數包裝到一個POJO中才可以。把集合包裝到 POJO 對象當中創建 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 +                '}';    }}

創建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提交時,可以指定contentTypejson形式,那麼在方法參數位置使用@RequestBody可以直接接收集合數據而無需使用POJO進行包裝。

創建 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/"/>

把原始的數據交給 Tomcat 找到資源

<mvc:default-servlet-handler/>

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

註意:通過谷歌開發者工具抓包發現,沒有加載到jquery文件,原因是SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表對所有的資源都進行過濾操作,可以通過以下兩種方式指定放行靜態資源:在spring-mvc.xml配置文件中指定放行的資源

<mvc:resources mapping="/js/**" location="/js/"/> 或<mvc:default-servlet-handler/>

6. 請求數據亂碼問題

post請求時,數據會出現亂碼,可以設置一個過濾器來進行編碼的過濾。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

<!--配置全局過濾的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. 參數綁定註解 @requestParam

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

當給的參數名與請求的參數名不一致時就為 null

在這裡插入圖片描述

在這裡插入圖片描述

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

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

註解@RequestParam還有如下參數可以使用:

value:與請求參數名稱required:此在指定的請求參數是否必須包括,默認是true,提交時如果沒有此參數則報錯

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

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

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

8. 獲得Restful風格的參數

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

在這裡插入圖片描述

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

在這裡插入圖片描述

訪問:

在這裡插入圖片描述

在這裡插入圖片描述

9. 自定義類型轉換器

SpringMVC 默認已經提供瞭一些常用的類型轉換器,例如客戶端提交的字符串轉換成int型進行參數設置。

但是不是所有的數據類型都提供瞭轉換器,沒有提供的就需要自定義轉換器,例如:日期類型的數據就需要自定義轉換器。

時間格式不匹配

在這裡插入圖片描述

在這裡插入圖片描述

自定義類型轉換器的開發步驟:

定義轉換器類實現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 ;    }}

在配置文件中聲明轉換器

<!--聲明轉換器--><bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">    <property name="converters">        <list>            <bean class="com.xdr630.coverter.DateConverter"></bean>        </list>    </property></bean>

<annotation-driven>中引用轉換器

<!--mvc註解驅動--><mvc:annotation-driven conversion-service="conversionService"/>

再次訪問:

在這裡插入圖片描述

控制臺查看:

在這裡插入圖片描述

10. 獲得Servlet相關API

SpringMVC支持使用原始ServletAPI對象作為控制器方法的參數進行註入,常用的對象如下:

HttpServletRequestHttpServletResponseHttpSession

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

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 單文件上傳步驟

導入fileuploadio坐標

<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>

配置文件上傳解析器

<!--配置文件上傳解析器--><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>

編寫文件上傳代碼

在這裡插入圖片描述

測試:

在這裡插入圖片描述

控制臺:

在這裡插入圖片描述

把文件進行保存

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

控制臺:

在這裡插入圖片描述

查看保存的路徑

在這裡插入圖片描述

12.4 多文件上傳實現

多文件上傳,隻需要將頁面修改為多個文件上傳項,將方法參數MultipartFile類型修改為MultipartFile[]即可

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

13. 知識要點

MVC實現數據請求方式

基本類型參數POJO類型參數數組類型參數集合類型參數

MVC獲取數據細節

中文亂碼問題@RequestParam 和 @PathVariable自定義類型轉換器獲得Servlet相關API@RequestHeader 和 @CookieValue文件上傳

到此這篇關於Java Spring MVC獲取請求數據詳解操作的文章就介紹到這瞭,更多相關Java Spring MVC 獲取請求數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: