Spring JPA 自定义验证器 Bean 注入

Spring JPA Custom Validator Bean Inyection

任何输入到 CustomValidator 实现中的 bean 总是空的。我使用 Spring Boot 2,应用程序是 REST API,我没有使用 MVC。

到目前为止,我已经尝试了我所读到的关于此的所有内容,但没有成功。

this topic here for example did not work for me

我是否应该验证其他方式?我已经坚持了 2 天了。

这是我的配置 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;
        }
    }


我的 CustomValidator 看起来像这样:


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
    @AlmacenValido
    @Table(name = "almacenes")
    public class Almacen {

        //Entity fields
    }


注解:



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


我已经为您创建了测试示例。请检查https://github.com/alex-petrov81/Whosebug-answers/tree/master/validation-bean-injection