文章目錄
一、請求參數綁定說明
1、基本數據類型和字符串類型
<a href="param/testParam?userId=1&userName=紅塵年少">請求參數綁定</a>
@RequestMapping(value = "/testParam")
public String testParam(Integer userId, String userName) {
System.out.println("請求參數綁定");
System.out.println(userId + "," + userName);
return "success";
}
2、實體類型
<form action="param/saveAccount" method="post">
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
金額:<input type="text" name="money"><br>
<hr>
姓名:<input type="text" name="user.name"><br>
年齡:<input type="text" name="user.age"><br>
<input type="submit" value="提交">
</form>
@RequestMapping(value = "/saveAccount")
public String saveAccount(Account account) {
System.out.println("請求參數綁定");
System.out.println(account);
return "success";
}
3、集合數據類型
<form action="param/saveAccount" method="post">
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
金額:<input type="text" name="money"><br>
<hr>
姓名:<input type="text" name="list[0].name"><br>
年齡:<input type="text" name="list[0].age"><br>
姓名:<input type="text" name="map['one'].name"><br>
年齡:<input type="text" name="map['one'].age"><br>
<input type="submit" value="提交">
</form>
@RequestMapping(value = "/saveAccount")
public String saveAccount(Account account) {
System.out.println("請求參數綁定");
System.out.println(account);
return "success";
}
二、請求參數中文亂碼的解決
細心的小夥伴們可能會發現,在上述表單中出現的用戶名和姓名都是用字母拼寫的,而沒有使用中文,這是爲什麼呢?不妨我們來看一下。
接下來,我們又將請求的方式修改爲get,我們驚奇的發現又沒有出現上述的中文亂碼的情況。
我們在web.xml
中配置一個過濾器用來解決中文亂碼的問題。
<!--配置解決中文亂碼問題-->
<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>
總結:當使用post請求方式提交表單時,若出現中文亂碼的問題,我們只需在web.xml中配置一個過濾器進行處理中文亂碼即可。
三、自定義類型轉換器
表單提交的任何數據類型全部都是字符串類型,但是後臺定義Integer類型,數據也可以封裝上,說明Spring框架內部會默認進行數據類型轉換。
<form action="param/saveUser" method="post">
用戶名:<input type="text" name="name"><br>
密碼:<input type="password" name="age"><br>
生日:<input type="text" name="date"><br>
<input type="submit" value="提交">
</form>
@RequestMapping(value = "/saveUser")
public String saveUser(User user) {
System.out.println("請求參數綁定");
System.out.println(user);
return "success";
}
表單中出現的日期類型,如果我們將日期的格式寫成XXXX-XX-XX的格式,頁面將會報錯。
出現這種類型轉換錯誤的情況,我們可以自定義類型轉換器。
4.1 編寫自定義類型轉換類實現Converter接口
public class StringToDateConverter implements Converter<String, Date> {
public Date convert(String source) {
// 判斷
if(source == null) {
throw new RuntimeException("參數不能爲空");
}
try {
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(source);
return date;
} catch (ParseException e) {
throw new RuntimeException("類型轉換錯誤");
}
}
}
4.2 註冊自定義類型轉換器,在springmvc.xml配置文件中編寫配置
<!--自定義類型轉換器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.uos.converter.StringToDateConverter"></bean>
</set>
</property>
</bean>
4.3 在 annotation-driven 標籤中引用配置的類型轉換服務
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
四、使用 ServletAPI 對象作爲方法參數
SpringMVC 還支持使用原始 ServletAPI 對象作爲控制器方法的參數。支持原始 ServletAPI 對象有:HttpServletRequest、、HttpServletResponse、HttpSession、java.security.Principal、Locale、InputStream、OutputStream、Reader和Writer。
使用方法很簡單,我們可以把上述對象,直接寫在控制的方法參數中使用。
<a href="param/testServlet">測試Servlet API</a>
@RequestMapping(value = "/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response) {
System.out.println(request);
HttpSession session = request.getSession();
System.out.println(session);
ServletContext servletContext = session.getServletContext();
System.out.println(servletContext);
System.out.println(response);
System.out.println("請求參數綁定");
return "success";
}