1

Any bean inyected into CustomValidator Implementation are always null. Im using Spring Boot 2, the applciation is a REST API, i'm not using MVC.

I have tried everything I have read about this with no luck so far.

this topic here for example did not work for me

Should I validate otherwise?, I've been stuck with this for 2 days already.

This is my Config class:



    @Configuration
    public class Beans {

        @Bean
        public BCryptPasswordEncoder passwordEncoder() {

            return new BCryptPasswordEncoder();
        }

        @Bean
        public MessageSource messageSource() {

            ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
            messageSource.setBasename("classpath:idiomas/idioma");
            messageSource.setUseCodeAsDefaultMessage(true);
            messageSource.setDefaultEncoding("UTF-8");

            return messageSource;
        }

        @Bean
        public LocaleResolver localeResolver() {

            AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
            resolver.setDefaultLocale(new Locale("es"));

            return resolver;
        }

        @Bean
        public LocalValidatorFactoryBean getValidator() {

            LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
            validatorFactoryBean.setValidationMessageSource(messageSource());

            return validatorFactoryBean;
        }

        @Bean
        public CommonsRequestLoggingFilter logFilter() {

            CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
            filter.setIncludeQueryString(true);
            filter.setIncludePayload(true);
            filter.setMaxPayloadLength(10000);
            filter.setIncludeHeaders(true);
            filter.setAfterMessagePrefix("REQUEST: ");
            return filter;
        }
    }


My CustomValidator looks like this:


public class AlmacenValidator implements ConstraintValidator {

    @Autowired
    private AlmacenService servicio;

    @Autowired
    private ApplicationContext contexto;

    @Override
    public void initialize(AlmacenValido constraintAnnotation) {

    }

    @Override
    public boolean isValid(Almacen item, ConstraintValidatorContext context) {

        //Database calls
    }

JPA Entity:



    @Entity
    @AlmacenValido
    @Table(name = "almacenes")
    public class Almacen {

        //Entity fields
    }


The Annotation:



    @Documented
    @Retention(RUNTIME)
    @Target({ TYPE, FIELD, ANNOTATION_TYPE, PARAMETER })
    @Constraint(validatedBy = AlmacenValidator.class)
    public @interface AlmacenValido {

        String message() default "{validacion.almacen}";

        Class[] groups() default {};

        Class[] payload() default {};
    }


doriak
  • 45
  • 5

1 Answers1

0

I've created test example for you. Please check it https://github.com/alex-petrov81/stackoverflow-answers/tree/master/validation-bean-injection

Alexander Petrov
  • 951
  • 6
  • 11
  • Thanks for test example, I'm accepting your answer. I expected to be able to use jpa entities for validation instead of dto, but at least with dto this approach works. – doriak Sep 04 '18 at 17:53