8

Das ist mein benutzerdefinierten Validator ist, die einige Felder Verfügbarkeit überprüft. Das UserRepository ist null, daher wird es dem Validierer nicht injiziert.Frühling Boot benutzerdefinierte Einschränkung Validator nicht mit Dienst injiziert

public class AvailableValidator implements ConstraintValidator<Available,String> { 

    @Autowired 
    private UserRepository userRepository; 

    private Available.Field type; 

    public void initialize(Available usernameAvailable) { 
     this.type = usernameAvailable.type(); 
    } 

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { 
     if (userRepository == null) System.out.println("\n\n------USER REPOSITORY IS NULL-------\n\n"); 


     switch (type){ 
      case EMAIL: 
       return userRepository.findByEmail(s)==null; 
      case NUMBER: 
       return userRepository.findByNumber(s)==null; 
      case NAME: 
       return userRepository.findByName(s)==null; 
      default: 
       return false; 
     } 
    } 
} 

Ich habe auf ähnliche Themen gelesen, dass ich Validator Factory einrichten muss. Ich habe dies getan:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args){ 
     SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public Validator validator(){ 
     return new LocalValidatorFactoryBean(); 
    } 
} 

Aber es funktioniert immer noch nicht. userRepository ist null. Wahrscheinlich habe ich die Konfiguration falsch gemacht, beim ersten Mal versuche ich Java Konfiguration.

+0

Sind AvailableValidator und UserRepository beide von Spring verwaltet (dh. Deklariert sie als Bohnen oder mit @ Komponente/@ Repository mit Anmerkungen versehen und ordnungsgemäß in der Komponente-Scan-Pfad)? – ikumen

+0

und wie führen Sie die Validierung genau durch? Siehe auch https://jira.spring.io/browse/SPR-13327 –

+0

Validierung wird permorfed automatisch, wenn Anmerkung Valid vorhanden ist. Der verfügbare Validator ist nicht mit @component annotiert, weil ich nicht denke, dass es sein muss. Zumindest in der alten XML-Konfiguration war es nicht erforderlich, eine Bean einer bestimmten Validator-Klasse zu spezifizieren. Wie auch immer es sich herausstellt, wenn ich eine Zeile in Eigenschaften hinzufüge, die die automatische Überprüfung des Hibernates verhindert, funktioniert es – Greyshack

Antwort

0

Als Alternative zu überwintert Validierung zu deaktivieren, haben Sie versucht, dies:

@Primary 
@Bean 
    public Validator validator(){ 
     return new LocalValidatorFactoryBean(); 
    } 

Dies würde Ihre Validator den Vorzug geben als here vorgeschlagen.

Mike Kowalski

Verwandte Themen