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>
私たちが入力したbithdayはStringタイプですが、エンティティクラスのbithdayはDateタイプです。この時、バインディングが成功しません。対応するcontrollerを要求すると以下のようなエラーが発生します。

したがって,パラメータバインディングを行う必要がある。
パラメータバインディングは主に2ステップを含みます。
1.クラスを新たに作って、Coverterインターフェースを実現します。

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>
これにより、カスタムパラメータタイプのバインディングが完了しました。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。