8

Questo è il mio validatore personalizzato che controlla la disponibilità di alcuni campi. Il UserRepository è nullo, quindi il validatore non viene iniettato con esso.Convalida vincolo personalizzato di avvio a molla non iniettato con servizio

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; 
     } 
    } 
} 

Ho letto su thread simili che devo impostare fabbrica validatore. Ho fatto questo:

@SpringBootApplication 
public class Application { 

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

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

Ma ancora non funziona. userRepository è un null. Probabilmente ho sbagliato la configurazione, la prima volta che ho provato la configurazione di java.

+0

Sono AvailableValidator e UserRepository sia gestito da Primavera (vale a dire. Sono essi dichiarati come i fagioli o annotato con @ componente/@ repository e correttamente nel percorso di scansione componente)? – ikumen

+0

e come si esegue esattamente la convalida? Vedi anche https://jira.spring.io/browse/SPR-13327 –

+0

La validazione è permessa automaticamente quando è presente l'annotazione Valid. Il validatore disponibile non è annotato con @component perché non penso che debba esserlo, almeno nella vecchia configurazione xml non era necessario speci fi care un bean di una classe di validatore specifica. Ad ogni modo si scopre quando aggiungo una linea in proprietà che disabilita la convalida automatica di ibernazione – Greyshack

risposta

0

In alternativa alla disattivazione di convalida Hibernates, avete provato questo:

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

Questo darebbe la preferenza validatore come suggerito here.

Mike Kowalski

Problemi correlati