- validationクラスを説明する。
- Emailチェック(CheckEmail.java)
- 全角チェック(CheckFull.java)
- 全角ひらがなチェック(CheckFullHira.java)
- 全角カタカナチェック(CheckFullKana.java)
- 先頭、末尾に全角空白を使用しないチェック(CheckFullStartEndSpace.java)
- 半角チェック(CheckHalf.java)
- 半角数字チェック(CheckHalfDigit.java)
- 半角カタカナチェック(CheckHalfKana.java)
- 半角カタカナ数字チェック(CheckHalfKanaDigit.java)
- 半角英字チェック(CheckHalfLetter.java)
- 半角英字大文字のみチェック(CheckHalfLetterBig.java)
- 半角英数字チェック(CheckHalfLetterDigit.java)
- 半角英数字大文字のみチェック(CheckHalfLetterDigitBig.java)
- 半角英数字記号チェック(CheckHalfLetterDigitKigou.java)
- 半角英数字小文字のみチェック(CheckHalfLetterDigitSmall.java)
- 半角英字小文字チェック(CheckHalfLetterSmall.java)
- ディレクトリ不使用文字チェック(CheckHalfNotDirMoji.java)
- 先頭、末尾に半角空白を使用しないチェック(CheckHalfStartEndSpace.java)
- 郵便番号チェック(CheckPost.java)
- ソート順チェック(CheckSortOrder.java)
- 電話番号チェック(CheckTel.java)
- チェックグループ(GroupOrder)(GroupOrder)
- チェックグループ(GroupOrder1)(GroupOrder1)
- チェックグループ(GroupOrder2)(GroupOrder2)
- チェックグループ(GroupOrder3)(GroupOrder3)
validationクラスを説明する。
当クラスは全て固定です。「javaSpringBootテーブル項目一覧などの定義」エクセルに影響されません。
Emailチェック(CheckEmail.java)
validation.CheckEmail.java
・独自、制約アノテーション(Constraint Annotation) を作成しています。
package com.kaz01u.demo.validation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;
import javax.validation.constraints.Pattern;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Emailチェック
*
*/
・javadoc コマンドなどで作成したドキュメントに反映させる為の設定。
@Documented
・バリデーションを行うクラスを指定するが、今回は空(チェックは@Patternを使う)。
@Constraint(validatedBy = {})
・アノテーションの付与対象をクラスを、METHOD(メソッドの宣言)、FIELD(フィールドの宣言)、ANNOTATION_TYPE(アノテーション型の宣言)、CONSTRUCTOR(コンストラクタの宣言)、PARAMETER(メソッドのパラメータの宣言)とする。
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
・RetentionPolicyはclassファイルに記録され実行時に参照できるモード(Runtime)とする。よって、CheckEmailアノテーションチェック処理を1クラスで複数回実施できるようになる。
@Retention(RUNTIME)
・@ReportAsSingleViolationを利用するとデフォルトメッセージ(今回は、String message() default "{CheckEmail}";)が機能します。例えば、このCheckEmailにはないが、@Size(min = 5, max = 50)とかも書いといて、@Patternのチェックと同時にチェックするとしたとき、@Sizeのエラーは出さずに、デフォルトメッセージのみ出すために@ReportAsSingleViolationを使っています。
@ReportAsSingleViolation
・このアノテーションのルールを@Patternに定義する。これは、Emailの条件です。
・以降の全角チェック(CheckFull.java)~電話番号チェック(CheckTel.java)はこの@Patternの違いでチェックしている。ので、当書では@Patternのみ記述します。
@Pattern(regexp = "^(([a-zA-Z0-9])+([a-zA-Z0-9\\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\\._-]+)+)*$")
・CheckEmailアノテーションになる。
public @interface CheckEmail {
・制約アノテーション(Constraint Annotation) には、決まったひな形(message(), groups(), payload() )の設定が必須です。
・エラー時に例外オブジェクトに設定されるメッセージ。"{CheckEmail}"はmessages.propertiesのCheckEmailになる。
String message() default "{CheckEmail}";
・特定のバリデーショングループをカスタマイズ可能にする設定(※空の Class<?> 型で初期化)。
Class<?>[] groups() default {};
・チェック対象のオブジェクトにメタ情報を与える為の宣言。
Class<? extends Payload>[] payload() default {};
・ここからは、アノテーション内部に定義されたアノテーション。外側に定義したアノテーション(CheckEmailアノテーション)の配列を返すように宣言する。
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface List {
CheckEmail[] value();
}
}
全角チェック(CheckFull.java)
validation.CheckFull.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[^ -~。-゚]*$")
全角ひらがなチェック(CheckFullHira.java)
validation.CheckFullHira.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[あ-んー ]*$")。
全角カタカナチェック(CheckFullKana.java)
validation.CheckFullKana.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[ァ-ヶー ]*$")。
先頭、末尾に全角空白を使用しないチェック(CheckFullStartEndSpace.java)
validation.CheckFullStartEndSpace.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[^( )].*[^( )]$|^[^( )]$|^$")。
半角チェック(CheckHalf.java)
validation.CheckHalf.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[\\x00-\\x7F]*$")。
半角数字チェック(CheckHalfDigit.java)
validation.CheckHalfDigit.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[0-9]*$")。
半角カタカナチェック(CheckHalfKana.java)
validation.CheckHalfKana.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[ヲ-゚ ]*$")。
半角カタカナ数字チェック(CheckHalfKanaDigit.java)
validation.CheckHalfKanaDigit.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[ヲ-゚0-9 ]*$")。
半角英字チェック(CheckHalfLetter.java)
validation.CheckHalfLetter.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[a-zA-Z ]*$")。
半角英字大文字のみチェック(CheckHalfLetterBig.java)
validation.CheckHalfLetterBig.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[A-Z ]*$")。
半角英数字チェック(CheckHalfLetterDigit.java)
validation.CheckHalfLetterDigit.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")。
半角英数字大文字のみチェック(CheckHalfLetterDigitBig.java)
validation.CheckHalfLetterDigitBig.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[A-Z0-9 ]*$")。
半角英数字記号チェック(CheckHalfLetterDigitKigou.java)
validation.CheckHalfLetterDigitKigou.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[a-zA-Z0-9!-/:-@\\[-`{-~ ]*$")。
半角英数字小文字のみチェック(CheckHalfLetterDigitSmall.java)
validation.CheckHalfLetterDigitSmall.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[a-z0-9 ]*$")。
半角英字小文字チェック(CheckHalfLetterSmall.java)
validation.CheckHalfLetterSmall.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[a-zA-Z0-9 ]*$")。
ディレクトリ不使用文字チェック(CheckHalfNotDirMoji.java)
validation.CheckHalfNotDirMoji.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[^/:*?\"\\<>|~\\x5C]*$")。
先頭、末尾に半角空白を使用しないチェック(CheckHalfStartEndSpace.java)
validation.CheckHalfStartEndSpace.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[^ ].*[^ ]$|^[^ ]$|^$")。
郵便番号チェック(CheckPost.java)
validation.CheckPost.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[0-9]{3}-[0-9]{4}$|^$")。
ソート順チェック(CheckSortOrder.java)
validation.CheckSortOrder.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[AD]{1}$|^$")。
電話番号チェック(CheckTel.java)
validation.CheckTel.java
考え方はEmailチェック(CheckEmail.java)と同じなので、当書では@Patternのみ記述します。
@Pattern(regexp = "^[0-9]{2,4}-[0-9]{2,4}-[0-9]{4}$|^$")。
チェックグループ(GroupOrder)(GroupOrder)
validation.GroupOrder.java
・UserController.javaで「public String userInsDo(@Validated(GroupOrder.class) UserForm userForm,・・・」のように使用しています。
・@Validated(GroupOrder.class) は@Validated({GroupOrder1.class, GroupOrder2.class, GroupOrder3.class}) と同じ意味です。
package com.kaz01u.demo.validation;
import javax.validation.GroupSequence;
/**
* チェックグループ(GroupOrder)
*
*/
@GroupSequence({GroupOrder1.class, GroupOrder2.class, GroupOrder3.class})
public interface GroupOrder {
}
チェックグループ(GroupOrder1)(GroupOrder1)
validation.GroupOrder1.java
・ShohinController.javaで「ublic String shohinInsDo(@Validated({GroupOrder1.class, GroupOrder2.class}) ShohinForm shohinForm,・・・」のように使用しています。
package com.kaz01u.demo.validation;
/**
* チェックグループ(GroupOrder1)
*
*/
public interface GroupOrder1 {
}
チェックグループ(GroupOrder2)(GroupOrder2)
validation.GroupOrder2.java
・ShohinController.javaで「ublic String shohinInsDo(@Validated({GroupOrder1.class, GroupOrder2.class}) ShohinForm shohinForm,・・・」のように使用しています。
package com.kaz01u.demo.validation;
/**
* チェックグループ(GroupOrder2)
*
*/
public interface GroupOrder2 {
}
チェックグループ(GroupOrder3)(GroupOrder3)
validation.GroupOrder3.java
・UserForm.javaで「@AssertTrue(message="『パスワード確認』は『パスワード』と同じ値を入力してください", groups={GroupOrder3.class})」のように使用しています。
package com.kaz01u.demo.validation;
/**
* チェックグループ(GroupOrder3)
*
*/
public interface GroupOrder3 {
}