是否可以手动触发ConstraintValidationError以使用其错误模板?

时间:2018-12-01 16:19:12

标签: java spring spring-boot spring-data-jpa bean-validation

在我的API项目中,我有一个自定义的ConstraintValidator来检查电子邮件地址是否尚未与另一个帐户关联。

接口:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Constraint(validatedBy = EmailUniqueConstraintValidator.class)
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EmailUnique {

    String message() default "cannot already be associated with another account";

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

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

验证者:

import com.demo.demoapp.repo.UserRepository;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;


public class EmailUniqueConstraintValidator implements ConstraintValidator<EmailUnique, String> {

    private UserRepository userRepository;


    public EmailUniqueConstraintValidator(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value == null || !userRepository.existsByEmail(value);
    }
}

此验证器已添加到用户创建请求对象中,并将正确检查电子邮件地址的存在,并在出现这种情况时将错误返回给BindingResult。

但是在编辑用户时,事情变得更加复杂。除了对象之外,用户对象必须完全传递给API,因此始终会触发此约束验证器。因此,我想从类中删除@EmailUnique批注并在Service中手动触发它。有可能吗?

0 个答案:

没有答案
相关问题