【问题标题】:Spring JPA Custom Validator Bean InyectionSpring JPA 自定义验证器 Bean 注入
【发布时间】:2018-09-04 14:31:43
【问题描述】:

任何注入 CustomValidator 实现的 bean 始终为空。我使用的是 Spring Boot 2,应用程序是一个 REST API,我没有使用 MVC。

到目前为止,我已经尝试了我所读到的一切,但没有运气。

this topic here for example did not work for me

我应该另外验证吗?,我已经坚持了 2 天了。

这是我的配置类:

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

【问题讨论】:

    标签: validation spring-boot bean-validation


    【解决方案1】:

    【讨论】:

    • 感谢您的测试示例,我接受您的回答。我希望能够使用 jpa 实体而不是 dto 进行验证,但至少使用 dto 这种方法有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多