java - 是否可以手动触发 ConstraintValidationError 以使用其错误模板?
问题描述
在我的 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 中手动触发它。那可能吗?
解决方案
推荐阅读
- python-3.x - Selenium 在不同屏幕中打开浏览器
- javascript - 使用 Jquery 更新 HTML 附加项
- php - mysqli (oop) 在 mysql 服务器上运行但不是 mariadb
- mongodb - 带有数组元素的 MongoDB 数学运算
- java - 更改我的输出 java/Sparql 的类型
- php - 如何使用 Laravel 在 Google 地图上添加更多的两端方向
- python - Python UUID 字节序混淆
- php - 检查日期是否具有特定格式
- javascript - 当该点可能会沿途改变时,CSS从特定点缩放?
- python - 设置新的用户数据目录后硒无法打开页面