Beim Versuch, ein Modell mit JSR-303 (Hibernate-Validator) zu validieren, ist ein Problem beim Injizieren von Validator
in die Spring-Application-Bean aufgetreten.
Meine Hauptkonfigurationsklasse ist:
@EnableAutoConfiguration
@EnableWebMvc // <---
@EnableJpaRepositories("com.example")
@EntityScan("com.example")
public class MainConfiguration {
Nach den Javadocs:
/**
* Provide a custom {@link Validator} instead of the one created by default.
* The default implementation, assuming JSR-303 is on the classpath, is:
* {@link org.springframework.validation.beanvalidation.LocalValidatorFactoryBean}.
* Leave the return value as {@code null} to keep the default.
*/
Validator getValidator();
Die Ruhezustandsüberprüfung befindet sich auf dem Klassenpfad. Ich versuche es in das Repository zu injizieren:
@Repository
public class UserRepositoryImpl implements UserRepositoryCustom {
@Autowired
private Validator validator;
Ausnahme wird geworfen:
No qualifying bean of type [javax.validation.Validator] found for dependency:
PDATE:
Die teilweise Umgehung hierfür besteht darin, dies in der Hauptkonfigurationsklasse zu definieren:
@Bean
public Validator validator() {
return new org.springframework.validation.beanvalidation.LocalValidatorFactoryBean();
}
Integrationstests (die Annotation org.springframework.test.context.web.WebAppConfiguration;
Und Validierungslogik erfordern) schlagen jedoch fehl.
Sie müssen eine Bean vom Typ LocalValidatorFactoryBean
folgendermaßen deklarieren:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
in XML oder
@Bean
public javax.validation.Validator localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
in Java Config.
This Ein Teil der Spring-Dokumentation enthält alle Details