看完這篇Spring MVC請求參數綁定,我笑了。

一、請求參數綁定說明

在這裏插入圖片描述

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";
    }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章