1. 程式人生 > >SpringMVC中的參數綁定

SpringMVC中的參數綁定

format 成了 == ati override 提交 ets 需要 類的屬性

SpringMVC中的參數綁定

  參數綁定的定義

  所謂參數綁定,簡單來說就是客戶端發送請求,而請求中包含一些數據,那麽這些數據怎麽到達 Controller。從客戶端請求key/value數據(比如get請求中包含的數據),經過參數綁定,將key/value數據綁定到controller方法的形參上。springmvc中,接收頁面提交的數據是通過方法形參來接收。而不是在controller類定義成員變量接收。

技術分享圖片

  

  SpringMVC中默認支持的類型

    技術分享圖片

  自定義參數類型進行綁定

  對於有些參數類型,由於我們輸入的參數的類型與實體類中的參數類型不同,因此導致傳值不能成功,此時,需要進行參數類型綁定。下面以Date類型為例介紹怎樣進行自定義參數類型綁定。

User.java

import java.util.Date;
 
public class User {
    private Integer id;
 
    private String username;
 
    private String sex;
 
    private Date birthday;
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public
String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex == null
? null : sex.trim(); } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }

JSP頁面:註意輸入框的 name 屬性值和上面 POJO 實體類的屬性保持一致即可映射成功。

  <form action="pojo" method="post">
        用戶id:<input type="text" name="id" value="2"></br>
        用戶名:<input type="text" name="username" value="Marry"></br>
        性別:<input type="text" name="sex" value="女"></br>
        出生日期:<input type="text" name="birthday" value="2017-08-25"></br>
        <input type="submit" value="提交">
    </form>

  因為我們輸入的birthday是String類型,但是實體類中的birthday是Date類型,此時,就不會綁定成功,請求相應的controller會出現如下錯誤:

  技術分享圖片

  因此我們需要進行參數綁定。

  參數綁定主要包括兩步:

  1. 新建一個類實現Converter接口

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import org.springframework.core.convert.converter.Converter;
 
//需要實現Converter接口,這裏是將String類型轉換成Date類型
public class DateConverter implements Converter<String, Date> {
 
    @Override
    public Date convert(String source) {
        //實現將字符串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return dateFormat.parse(source);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //如果參數綁定失敗返回null
        return null;
    }
 
}

  

  2. 在配置文件中進行配置

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
     
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <!-- 自定義轉換器的類名 -->
            <bean class="com.ys.util.DateConverter"></bean>
        </property>
    </bean>

  這樣就完成了自定義參數類型的綁定。

SpringMVC中的參數綁定