У меня есть метод Controler, получающий адрес электронной почты из формы, которую пользователь может использовать, если, например, он потерял свой пароль или если он не получил подтверждающее письмо после регистрации.
Таким образом, когда пользователь отправляет форму контроллера, проверьте, действителен ли Email.Я также создал собственный валидатор, чтобы проверить, существует ли электронная почта в базе данных.Таким образом, валидатор выполняет выбор и возвращает false, если запрос ничего не возвращает.Я думаю, что так удобно делать, но разве это хорошая идея?распространенная практика?
@PostMapping({"/password/forgot"})
public ModelAndView passwordForgot(@ModelAttribute("email")
@Valid
@RequestBody EmailDto email,
BindingResult result,
WebRequest request,
Errors errors) {
if (!result.hasErrors()) {
//send the email
}
return new ModelAndView("passwordForgot", "email", email);
}
Email DTO
@NoArgsConstructor
@Getter
@Setter
public class EmailDto {
@NotNull
@NotEmpty
@Email
@EmailExist
private String email;
}
Email Exist Validator
@Target({TYPE, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = EmailExistValidator.class)
@Documented
public @interface EmailExist {
String message() default "{email.not.exist}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class EmailExistValidator implements ConstraintValidator<EmailExist, String> {
@Autowired
private AuthPersonRepository personRepository;
@Override
public void initialize(EmailExist constraintAnnotation) { }
@Override
public boolean isValid(String email, ConstraintValidatorContext context){
AuthPerson person = personRepository.findByEmail(email);
return person != null;
}
}