validated validate starter restcontroller example body bean java spring validation spring-boot

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.