Этот пример немного надуманный;Я упростил это, чтобы удалить посторонние детали и сосредоточиться на проблеме, с которой я столкнулся.У меня есть валидатор, который выглядит следующим образом:
@Component
public class UniqueUsernameValidator implements ConstraintValidator<UniqueUsername, String> {
@Autowired
UsernameService usernameService;
@Override
public void initialize(UniqueUsername uniqueUsername) {
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
return !usernameService.exists(s);
}
}
Я вызываю валидатор из моего контроллера следующим образом:
@RequestMapping
public void checkUsername(Model model, User user) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> constraintViolations = validator.validateProperty(user, "username");
model.addAttribute("error", constraintViolations.size() > 0);
}
Однако я продолжаю получать исключение NullPointerException
.Я добавил точку останова в свой валидатор и увидел, что usernameService
было null
.Почему он не подключается автоматически?Первоначально я думал, что это потому, что я не аннотировал валидатор с помощью @Component
, но у меня все еще остается та же проблема, даже после аннотирования.Класс UsernameService
уже аннотирован с помощью @Service
, и я могу убедиться, что вызывается его конструктор.
Я новичок в Spring, поэтому я даже не уверен, можно ли подключитьсервис в валидатор.Что я делаю не так?