@Autowired Bean funktioniert mit @Valid auf dem Controller, schlägt jedoch mit dem CRUD-Repository fehl
Ich arbeite an einer Spring MVC + Hibernate + JPA-App mit einem Benutzerregistrierungsformular und habe mich für die Verwendung eines JSR-303-Validators entschieden, um zu überprüfen, ob der Benutzername in der Datenbank bereits vorhanden ist:
public class UniqueUsernameValidator implements ConstraintValidator<VerifyUniqueUsername, String> {
@Autowired
UserService userService;
@Override
public void initialize(VerifyUniqueUsername constraintAnnotation) {
}
@Override
public boolean isValid(String username, ConstraintValidatorContext context) {
return username!=null && userService.findByUsername(username) == null;
}
}
Es ist sehr einfach und die Validierung hat auf meinem Controller hervorragend funktioniert:
....
public String signup(@Valid @ModelAttribute("newUser") User user, BindingResult newUserBeanResult)
.....
Das aktuelle Problem, mit dem ich konfrontiert bin, ist das, nachdem ich meine bekommen habeUser
Objekt validiert und ich rufe an:
userService.save(user);
Welche implementiertCrudRepository
, Ich bekomme einNullPointerException
. Aus irgendeinem GrundUserService
wird während der Validierung auf dem Controller aber eingespeistnicht wenn ich anrufeCrudRepository.save()
.
Ich habe ähnliche Beiträge wie diesen gesehen:@Autowired bean null in ConstraintValidator, wenn es von Sessionfactory.getCurrentSession.merge aufgerufen wird und das:Aktivieren des Ruhezustands ohne Verwendung von Autowire aber ich habe mich gefragt, ob schon jemand darauf gestoßen ist. Ich würde denken, dass das Injizieren von Beans für den Zugriff auf die Datenbank auf einem Validator ziemlich häufig ist.
Als Workaround habe ich ein Häkchen für Null hinzugefügtuserService
aber es fühlt sich nicht richtig an.
CrudRepository.save()
?Soll ich "manuell" Ruhezustände behandeln? In diesem Fallpre-insert