Java 用于定义自定义错误消息的ConstraintValidatorContext
我想使用注释创建自定义电子邮件验证程序。 以下是注释:Java 用于定义自定义错误消息的ConstraintValidatorContext,java,spring,validation,constraints,Java,Spring,Validation,Constraints,我想使用注释创建自定义电子邮件验证程序。 以下是注释: @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {CommonsEmailValidator.c
@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();
}
}
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION\u TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER})
@保留(RetentionPolicy.RUNTIME)
@约束(validatedBy={commonEmailValidator.class})
@记录
@报告违规行为
public@interface ExEmailValidator{
String message()默认值“{org.hibernate.validator.constraints.Email.message}”;
类[]组()默认值{};
类您应该使用@ControllerAdvice
并使用@ExceptionHandler(MethodArgumentNotValidException.Class)处理验证异常
例如。您的问题是?有一个异常,因为它是无效的,正如您所期望的,所以我看不出您有什么问题。一件事是您的注释上的消息
值中有很多前导空格。是的,异常是可以预料的,但我不想显示500个错误,而是希望看到一个错误解释错误的消息。这不允许用户在输入格式良好的电子邮件之前单击提交。验证在服务器上完成,而不是在客户端完成,因此您必须按提交来触发验证。啊,好的。那么cutom错误消息呢?请检查我编辑的帖子。假设您使用的是Spring MVC,请添加@Valid
添加到要验证的方法参数。
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);
}
}