天天看點

SpringMVC(二):springMVC請求參數詳解

一、請求參數綁定的類型

1、請求參數綁定基本類型

1.1、在頁面添加通路

<h3>2、基本類型資料綁定</h3>
        <a href="/request/testBasicTypes?username=zhangsan&password=123" target="_blank" rel="external nofollow" >基本類型資料綁定</a><br/>
           

1.2、在處理器添加處理

/**
     * 請求參數綁定:基本類型資料綁定
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("/testBasicTypes")
    public String testBasicTypes(String username,String password) {
        System.out.println("使用者名:" + username + ",密碼:" + password);
        return "success";
    }
           

1.3、控制台輸出結果

SpringMVC(二):springMVC請求參數詳解

2、請求參數綁定實體類型

2.1、建立實體類

package com.wedu.springmvc.domain;

import java.util.Date;

public class Userinfo {

    private String username;
    private String password;
    private Date date;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "Userinfo{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", date=" + date +
                '}';
    }
}
           

2.2、在頁面添加通路

<h3>2、JavaBean資料綁定</h3>
        <form action="/request/testJavaBean" method="post">
            使用者名:<input type="text" name="username"/>
            密  碼:<input type="text" name="password"/>
            <input type="submit" value="送出"/>
        </form>
           

2.3、在處理器添加處理

/**
     * 請求參數綁定:JavaBean資料綁定
     * @param userinfo
     * @return
     */
    @RequestMapping("/testJavaBean")
    public String testJavaBean(Userinfo userinfo) {
        userinfo.setDate(new Date());
        System.out.println(userinfo);
        return "success";
    }
           

2.4、控制台輸出結果

SpringMVC(二):springMVC請求參數詳解

3、請求參數綁定集合類型

3.1、建立實體

package com.wedu.springmvc.domain;

import java.util.List;
import java.util.Map;

public class Account {

    private List<Userinfo> list;
    private Map<String,Userinfo> map;

    public List<Userinfo> getList() {
        return list;
    }

    public void setList(List<Userinfo> list) {
        this.list = list;
    }

    public Map<String, Userinfo> getMap() {
        return map;
    }

    public void setMap(Map<String, Userinfo> map) {
        this.map = map;
    }

    @Override
    public String toString() {
        return "Account{" +
                "list=" + list +
                ", map=" + map +
                '}';
    }
}
           

3.2、在頁面添加通路

<h3>3、集合類型資料綁定</h3>
        <form action="/request/testConllection" method="post">
            使用者名:<input type="text" name="list[0].username"/>
            密  碼:<input type="text" name="list[0].password"/><br/>

            使用者名:<input type="text" name="map['test'].username"/>
            密  碼:<input type="text" name="map['test'].password"/>
            <input type="submit" value="送出"/>
        </form>
           

3.3、在處理器添加處理

/**
     * 請求參數綁定:集合類型資料綁定
     * @param account
     * @return
     */
    @RequestMapping("/testConllection")
    public String testConllection(Account account) {
        System.out.println(account);
        return "success";
    }
           

3.4、控制台輸出結果

SpringMVC(二):springMVC請求參數詳解

二、請求參數綁定一些問題詳解

1、中文亂碼問題

原因:在表單送出時,浏覽器會對中文參數值進行編碼。伺服器段預設會使用iso-8859-1來解碼,如果表單的編碼方式和伺服器的不一緻,就會産生亂碼。

解決方式:在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>
           

2、類型轉換問題

在浏覽器發送的請求資料到伺服器時,有時因為伺服器接收的類型與浏覽器發送的類型不一緻,可能會導緻類型轉換問題,如時間,在浏覽器發送到伺服器時是字元串的格式,伺服器中接收資料的時候需要的是日期類型的。這時,我們可以自定義一個類型轉換器:

package com.wedu.springmvc.utils;

import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.Nullable;
import sun.security.krb5.internal.PAData;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 字元串轉換為日期類型工具類
 */
public class StringToDateConverter implements Converter<String,Date> {

    @Nullable
    @Override
    public Date convert(String source) {
        String pattern = null;
        if(source == null) {
            throw new RuntimeException("請您傳入資料");
        } else if (source.contains(".")){
            pattern = "yyyy.MM.dd";
        }else if (source.contains("/")){
            pattern = "yyyy/MM/dd";
        }else if (source.contains("-")) {
            pattern = "yyyy-MM-dd";
        } else {
            throw new RuntimeException("您傳入的資料格式不對,請重新輸入");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try {
            return sdf.parse(source);
        } catch (ParseException e) {
            throw new RuntimeException("資料類型轉換出現錯誤");
        }
    }
}
           

然後在springmvc.xml中配置自定義類型轉換器

<!-- 配置自定義類型轉換器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.wedu.springmvc.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>
           

繼續閱讀