【问题标题】:ConstraintValidatorContext to define custom error messagesConstraintValidatorContext 定义自定义错误消息
【发布时间】:2016-09-03 23:04:04
【问题描述】:

我想使用注释创建自定义电子邮件验证器。 This solution was useful while creating the validator. 这是注释:

@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);
 }

 }

我运行该项目,但是,当我在注册表单上单击提交时,虽然电子邮件格式无效,但出现以下异常:

请求处理失败;嵌套异常是 javax.validation.ConstraintViolationException:在组 [javax.validation.groups.Default, ]

的持续时间内,类 [...] 的验证失败

异常与预期一样,但我不想显示 500 错误,而是希望看到一条错误消息来解释问题所在。 所以,我想我必须使用 ConstraintValidatorContext 来定义自定义错误消息。但是,我不知道该怎么做。 请问有什么想法吗?

【问题讨论】:

  • 你的问题是?有一个例外,因为它是无效的,正如您所期望的,所以我看不出您遇到的问题。一件事是注释的 message 值中有很多前导空格。
  • 是的,异常是预期的,但我不想显示 500 错误,而是希望看到一条错误消息来解释问题所在。这不允许用户在输入格式正确的电子邮件之前单击提交
  • 验证是在服务器上完成的,而不是在客户端上,所以你必须按下提交来触发验证。
  • 啊,好吧。那么自定义错误消息呢?请检查我编辑的帖子。
  • 假设您使用的是 Spring MVC,请将 @Valid 添加到您要验证的方法参数中。

标签: java spring validation constraints


【解决方案1】:

您应该使用@ControllerAdvice 并使用@ExceptionHandler(MethodArgumentNotValidException.class) 处理验证异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2011-04-27
    • 2018-09-02
    • 2021-09-13
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多