前四種數據注入的方式,會自動進行類型轉換。但無法自動轉換日期類型。
(1)單個數據(基本數據類型)注入
在方法中聲明一個和表單提交的參數名稱相同的參數,由框架按照名稱直接注入。
?
(2)對象封裝注入
在方法中聲明一個自定義的實體類參數,框架調用實體類中相應的setter方法注入屬性值,只要保證實體類中成員變量的名稱與提交請求的name屬性值一致即可。
?
實體Bean含對象屬性
比如:Student對象,其中有一個Address的對象屬性,在Address對象中有country和city兩個基本類型的屬性。
<form action="${pageContext.request.contextPath}/objectParam" method="post"><fieldset><legend>對象數據提交</legend>姓名:<input type="text" name="stuname" /> <br />年齡:<input type="text" name="stuage" /> <br />國家:<input type="text" name="address.country" /> <br />城市:<input type="text" name="address.city" /> <br /><input type="submit" value="提交"></fieldset></form>
(3)動態占位符提交/路徑變量(僅用于超鏈接)
使用框架提供的一個注解@PathVariable,將請求url中的值作為參數進行提取,只能是超鏈接。restful風格下的數據提取方式。
restful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。
它主要用于客戶端和服務器交互類的軟件。基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現緩存等機制。
RESTful風格是把請求參數變為請求路徑的一種編程風格。通過路徑變量的使用,可以實現RESTful風格的編程。
中文亂碼:
由于tomcat默認使用ISO-8859-1對接收的文本編碼,因此要獲得正確中文有兩種解決方式:
-
自己轉碼
使用如下轉碼方式。先把name以ISO-8859-1再編碼,還原成字節數組,再用UTF-8進行解碼,即可獲得正確中文。
String newName=new String(name.getBytes("ISO-8859-1"),"UTF-8");
-
修改tomcat | conf | server.xml
在server.xml的Connect中添加URIEncoding="utf-8",這樣默認就是用utf-8解碼了,參數綁定中文也可以正確顯示:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="utf-8"/>
另,web.xml配置的filter只對post請求有效,因此對此問題不是解決之道。
(4)請求參數名稱與形參名稱不一致
請求與形參中的名字不對應,可以使用
@RequestParam(value="name1",required=true) String namea來進行參數名稱綁定。
(5)數組類型的請求參數
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){System.out.println("我的愛好:");for(String s:hobby){System.out.println(s);}return "main";
}
(6)使用HttpServletRequest對象提取
在方法參數中聲明一個request對象,使用request的getParameter()獲取表單提交的數據,這樣得到的數據還要手工進行數據類型的轉換。
public String five(HttpServletRequest request){int age=new Integer(request.getParameter("stuage"));String name=request.getParameter("stuname");System.out.println(age+"*********"+name);return "main";
}