java - validate - spring restcontroller validation
Spring-Boot Cómo inyectar correctamente javax.validation.Validator (1)
Debes declarar un bean de tipo LocalValidatorFactoryBean
así:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
en XML o
@Bean
public javax.validation.Validator localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
en la configuración de Java
docs.spring.io/spring/docs/current/spring-framework-reference/… parte de la documentación de Spring tiene todos los detalles
Tengo un problema al inyectar el Validator
en el bean de aplicación de primavera cuando intento validar un modelo usando JSR-303 (hibernate-validator)
Mi clase de configuración principal es:
@EnableAutoConfiguration
@EnableWebMvc // <---
@EnableJpaRepositories("com.example")
@EntityScan("com.example")
public class MainConfiguration {
De acuerdo con los 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();
Hibernate-validator está en el classpath. Intento inyectarlo en el Repositorio:
@Repository
public class UserRepositoryImpl implements UserRepositoryCustom {
@Autowired
private Validator validator;
Excepción lanzada:
No qualifying bean of type [javax.validation.Validator] found for dependency:
ACTUALIZAR:
La solución parcial para esto es definir esto en la clase de configuración principal:
@Bean
public Validator validator() {
return new org.springframework.validation.beanvalidation.LocalValidatorFactoryBean();
}
Pero las pruebas de integración (las que requieren org.springframework.test.context.web.WebAppConfiguration;
anotación y lógica de validación de uso) fallan.