SpringMVCパラメータバインディングの意味と過程解析の実現
パラメータバインディングの定義
パラメータバインディングとは、クライアントが要求を送信することであり、要求にはいくつかのデータが含まれているので、これらのデータはどのようにControllerに到達しますか?クライアントからkey/valueデータ(例えば、get要求に含まれるデータ)が要求され、パラメータバインディングを経て、key/valueデータがcontroller方法のイメージアップに結合される。springmvcでは、受信ページで提出されたデータは、方法により参照されて受信される。controllerクラスでメンバー変数を定義して受信するのではない。
SpringMVCではデフォルトでサポートされているタイプです。
カスタムパラメータタイプをバインドする
いくつかのパラメータタイプについては、私たちが入力したパラメータのタイプは、エンティティクラスのパラメータタイプとは異なるため、送信値が成功しない場合があります。パラメータタイプのバインディングが必要です。以下では、Dateタイプを例にとって、カスタムパラメータタイプのバインディングのやり方を紹介します。
User.java
したがって,パラメータバインディングを行う必要がある。
パラメータバインディングは主に2ステップを含みます。
1.クラスを新たに作って、Coverterインターフェースを実現します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
パラメータバインディングとは、クライアントが要求を送信することであり、要求にはいくつかのデータが含まれているので、これらのデータはどのように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>
これにより、カスタムパラメータタイプのバインディングが完了しました。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。