У меня есть dto
, как это
@FieldMatch(first = "email", second = "emailConfirm", message = "E-posta adresleri eslesmeli")
public class EmailDTO {
private String email;
private String emailConfirm;
это валидатор
public class FieldMatchValidator implements ConstraintValidator<FieldMatch, Object> {
private String firstFieldName;
private String secondFieldName;
private String message;
@Override
public void initialize(final FieldMatch constraintAnnotation) {
firstFieldName = constraintAnnotation.first();
secondFieldName = constraintAnnotation.second();
message = constraintAnnotation.message();
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext context) {
boolean valid = true;
try
{
final Object firstObj = BeanUtils.getProperty(value, firstFieldName);
final Object secondObj = BeanUtils.getProperty(value, secondFieldName);
valid = firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);
}
catch (final Exception ignore)
{
// ignore
}
if (!valid){
context.buildConstraintViolationWithTemplate(message)
.addPropertyNode(firstFieldName)
.addConstraintViolation()
.disableDefaultConstraintViolation();
}
return valid;
}
}
это интерфейс
arget({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch {
String message() default "The fields must match";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String first();
String second();
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface List
{
FieldMatch[] value();
}
}
но я также хочу изменить класс на этот
@FieldMatch(first = "email", second = "emailConfirm", message = "E-posta adresleri eslesmeli")
public class EmailDTO {
@Max(value = 150, message = "E-posta karakter sayisi fazla!")
@Email(message = "Email should be valid")
@NotNull(message = "Name cannot be null")
@NotEmpty(message = "Name cannot be null")
private String email;
@Max(value = 150, message = "E-posta karakter sayisi fazla!")
@Email(message = "Email should be valid")
@NotNull(message = "Name cannot be null")
@NotEmpty(message = "Name cannot be null")
private String emailConfirm;
Должен ли я использовать другое общее ограничение или множество аннотаций, как показано выше? У меня также есть другие объекты, такие как password
и т. Д., И эти объекты также будут иметь такие же проверки.
Некоторые поля могут быть nullable
, поэтому не каждое поле должно проверяться нулевым ограничением. Я хочу сделать очень общую проверку. Я отправлю на передний конец (thymeleaf
), поэтому мне нужно посмотреть, какое ограничение нарушено.
Электронная почта имеет @email
аннотацию, которая не будет в проверке пароля. Другие распространены. как
notnull, notempty, matching, notblank
Мне не удалось найти хороших примеров. Я нашел сообщения на эту тему ниже, но я не смог найти пример пользовательского +, например @email
проверка вместе.