Я написал пользовательскую аннотацию валидатора и класс валидатора для него. Но когда я вызываю entitymanager.persist(), пользовательская проверка не срабатывает. Чего мне не хватает, чтобы менеджер сущностей запускал мой пользовательский валидатор?
Когда я запускаю свои тесты, я вижу, как встроенные проверки @NotNull и @Size вызываются во время entitymanager.persist(), но мой пользовательский валидатор никогда не вызывается. Как мне это подключить?
Не обращайте слишком много внимания на фактическую проверку, которую я делаю. Я просто пытаюсь подключить его и срабатывать при сохранении.
Вот фрагмент аннотации:
import mypackage.validation.PasswordValidator;
@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordValidator.class)
@Documented
public @interface Password {
String message() default "{Invalid password}";
Class[] groups() default {};
Class[] payload() default {};
}
Вот фрагмент версии валидатора:
package mypackage.validation;
import mypackage.annotation.Password;
public class PasswordValidator implements ConstraintValidator<Password, String> {
@Override
public void initialize(Password passwordAnnotation) {
// TODO noop for now
}
@Override
public boolean isValid(String password, ConstraintValidatorContext context) {
if (StringUtils.isEmpty(password)) {
return false;
}
return true;
}
}
А вот фрагмент простого класса, который я комментирую:
import mypackage.validation.annotation.Password;
@GeneratePojoBuilder
@Entity
@Table(name = "users", catalog = "mycatalog")
public class User extends DatabaseEntity implements Serializable {
private static final long serialVersionUID = 58608923641104636L;
@Column(unique = true)
@Size(max = 128)
@NotNull
private String email;
// use @Column(length =...) instead of @Size here because password
// length will change after salting and hashing
@Column(length = 102)
@Password
@NotNull
private String password;
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Спасибо.
Validator#validate()
? - person Gunnar   schedule 14.08.2013