Можно ли вручную вызвать ConstraintValidationError, чтобы использовать его шаблон ошибки? - PullRequest
0 голосов
/ 01 декабря 2018

В моем проекте 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 из класса и вручную запустить ее в Сервисе.Это возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...