SpringMVCケース6:パラメータ検証の要求
11634 ワード
SpringMVCケース6:パラメータ検証の要求 jarパッケージのインポート説明:1)JSR 303は、JavaがBeanデータの正当性チェックのために提供する標準フレームワークであり、JavaEE 6.0にすでに含まれている2)Spring自体はJSR 303の実装を提供していないため、JSR 303の実装者のjarパッケージをクラスパスの下に置く必要がある3)Hibernate ValidatorはJSR 303の参照実装である.すべての標準の検証注記をサポートするほか、以下の拡張注記4)SpringのLocalValidatorFactroyBeanはSpringのvalidatorインタフェースとJSR 303のValidatorインタフェースを実現している.SpringコンテナにLocalValidatorFactoryBeanが定義されている限り、それをデータ検証が必要なBeanに注入することができます5)LocalValidatorFactoryBeanがデフォルトで組み立てられており、処理方法のパラメータに@Validated注記を付けることでSpring MVCがデータバインド完了後にデータ検証を実行できるようにする 検証内容を設定1)プロセッサメソッドのパラメータに検証するPOJOパラメータに@Validまたは@Validated注記(@Validated User,BindingResult result)2)検証注記を追加パラメータバインド時に検証することを示し、検証情報をBindingResultに書き込み、検証するpojoの後にBindingResultを追加し、BindingResultはpojoに対応し、BindingResultはpojoの後ろに 配置される. pojoオブジェクトのプロパティに検証ルール注記を追加 プロセッサメソッドでは、検証エラーがあるかどうかを確認し、ある場合はmodelに エラーを追加する.検証注記:1)JSR 303は、Bean属性に@NotNull、@Maxなどの規格に類似した注記を表示することにより検証ルールを指定し、標準的な検証インタフェースを使用してBeanを検証します.@Nullにコメントされている要素はnull@NotNullにコメントされている要素はnull@AssertTrueにコメントされていない要素はtrue@AssertFalseにコメントされている要素はfalse@Min(value)にコメントされている要素は数値でなければなりません.値は指定した最小値以上でなければなりません.valueはlongタイプでサポートされているタイプです.•BigDecimal•BigInteger•byte、short、int、long、およびそれらのパッケージクラス@Max(value)がコメントされている要素は、指定した最大値@DecimalMin(value)がコメントされている要素よりも小さい値でなければなりません.数値(または数値に変換可能な文字列)でなければなりません.値は指定した最小値以上でなければなりません.valueは文字列形式でサポートされているタイプです.•BigDecimal•BigInteger•CharSequence(@Minはサポートされていません)•byte,short,int,long、およびそれらのパッケージクラス@DecimalMax(value)がコメントされている要素は、指定した最大値@Size(max=,min=)以下の値でなければなりません.コメントされた要素のサイズは、指定された範囲内でなければなりません@Digits(integer,fraction)コメントされた要素は数値でなければなりません.その値は許容範囲内でなければなりません.integer:整数部長fraction:小数部長説明:文字列であれば、数値の文字列に変換する必要があります.検証に失敗した@Pastコメントされた要素は、過去の日付(仮想マシンの現在の日付と比較)@Futureコメントされた要素は、将来の日付@Pattern(regex=,flag=)コメントされた要素が指定された正規表現例に合致する必要があります:@Pattern(regexp=「^d{3,}$」,message=「パスワードが最低3桁」)private String password;2)Hibernate ValidatorはJSR 303の1つの参照実装であり、すべての標準の検証注釈をサポートするほか、以下の拡張注釈@NotBlank(message=)1)検証の対象をサポートする:CharSequenceサブタイプ2)検証注釈の要素値は空ではなく(nullではなく、末尾スペースを除いた長さは0)、@NotEmptyとは異なり、@NotBlankは文字列にのみ適用され、比較時に文字列の末尾スペースが除去されます@Emailコメントされる要素は、電子メールアドレス@Length(min=,max=)コメントされる文字列のサイズが指定された範囲内である必要があります@NotEmpty 1)検証の対象:CharSequenceサブタイプ、Collection、Map、配列2)検証コメントの要素値がnullではなく、空ではありません(文字列長が0ではなく、集合サイズが0ではない)@Range(min=,max=,message=)注釈された要素は、適切な範囲内で でなければならない.
<dependency>
<groupId>org.hibernategroupId>
<artifactId>hibernate-validatorartifactId>
<version>5.4.1.Finalversion>
dependency>
<dependency>
<groupId>javax.validationgroupId>
<artifactId>validation-apiartifactId>
<version>1.1.0.Finalversion>
dependency>
<dependency>
<groupId>org.jboss.logginggroupId>
<artifactId>jboss-loggingartifactId>
<version>3.3.1.Finalversion>
dependency>
<dependency>
<groupId>com.fasterxmlgroupId>
<artifactId>classmateartifactId>
<version>1.3.3version>
dependency>
public class User {
private Integer id;
@NotBlank
private String username;
@NotNull
@Length(min=3)
private String password;
...
}
@RequestMapping("login")
public String login(@Validated User user,BindingResult result,Model model) {
if(result.hasErrors()) {
model.addAttribute("errors", result.getFieldErrors());
return "forward:/login.jsp";
}
}
説明:1)boolean result.hasFieldErrors()またはboolean result.hasErrors()メソッドを使用して検証エラーがあるかどうかを判断する2)getFieldErrors():すべてのフィールドエラーを取得する5.jspページにエラーメッセージを表示する<c:forEach items="${ errors }" var="error">
${ error.defaultMessage }
c:forEach>