2016-05-09 7 views
2

注釈を使用してカスタム電子メールバリデータを作成したいと思います。ここThis solution was useful while creating the validator. は注釈です:カスタムエラーメッセージを定義するConstraintValidatorContext

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE,   ElementType.CONSTRUCTOR, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = {CommonsEmailValidator.class}) 
@Documented 
@ReportAsSingleViolation 
public @interface ExEmailValidator { 

String message() default "  {org.hibernate.validator.constraints.Email.message}"; 

Class<?>[] groups() default {}; 

Class<? extends Payload>[] payload() default {}; 

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE,   ElementType.CONSTRUCTOR, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface List { 
ExEmailValidator[] value(); 
} 
} 

そして、ここでクラスCommonsEmailValidatorです:

public class CommonsEmailValidator implements   ConstraintValidator<ExEmailValidator, String> { 
private static final boolean ALLOW_LOCAL = false; 
private EmailValidator realValidator =  EmailValidator.getInstance(ALLOW_LOCAL); 

@Override 
public void initialize(ExEmailValidator email) { 
// TODO Auto-generated method stub 
} 
@Override 
public boolean isValid(String email, ConstraintValidatorContext   constraintValidatorContext) { 
if(email == null) return true; 
return realValidator.isValid(email); 
} 

} 

私は電子メール形式はI有効ではありませんが、登録フォームに提出クリックしたときに、私は、プロジェクトを実行しますが、次の例外があります。

要求処理に失敗しました。ネストされた例外はjavax.validation.ConstraintViolationExceptionです:検証はクラスに失敗しました[...]グループ[javax.validation.groups.Default、]

error 500

例外がexcpected、しかし、その代わりにされたように時間を持続中に500エラーを表示すると、何が問題なのかを説明するエラーメッセージが表示されます。 私はConstraintValidatorContextを使用してカスタムエラーメッセージを定義する必要があると思います。しかし、私はそれを行う方法を知らない。 アイデアをお願いしますか?

+0

あなたの問題は?あなたが予期していたように、それが無効であるために例外があります。あなたが持っている問題は表示されません。ひとつは、アノテーションの 'message'値に多くの先行スペースがあることです。 –

+0

はい、例外は察知されましたが、500エラーを表示する代わりに、何が間違っているかを説明するエラーメッセージが表示されます。ユーザーは整形式のメールを入力するまでサブミットをクリックできません – Najoua

+0

検証はサーバーではなくクライアントで行われるため、検証をトリガーするにはsubmitを押す必要があります。 –

答えて

0

@ControllerAdviceを使用し、妥当性検査の例外を処理する場合は、たとえば@ExceptionHandler(MethodArgumentNotValidException.class)とします。

関連する問題