当前位置: 首页 > 知识库问答 >
问题:

Spring JPA自定义验证程序Bean InyAction

薛烨
2023-03-14

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

我已经尝试了所有我读到的关于这件事的东西,但到目前为止运气都不好。

例如,这里的这个话题对我来说并不适用

否则我应该验证吗?,我已经坚持了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 {};
    }


共有1个答案

宋畅
2023-03-14

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

 类似资料:
  • 我正在开发spring mvc应用程序,我应该在spring mvc validator的基础上应用验证。第一步,我为类和设置控制器添加了注释,效果很好。现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释并添加额外的检查。 我的用户类: 我的验证器: 我的控制器: 那么,有可能同时使用自定义验证器和注释吗?如果是,怎么做?

  • 表单验证发生在数据验证之后。如果你需要定制化这个过程,有几个不同的地方可以修改,每个地方的目的不一样。表单处理过程中要运行三种类别的验证方法。它们通常在你调用表单的is_valid() 方法时执行。还有其它方法可以触发验证过程(访问errors 属性或直接调用full_clean() ),但是通用情况下不需要。 一般情况下,如果处理的数据有问题,每个类别的验证方法都会引发ValidationErr

  • 我有以下验证器,用于验证更新请求。 object.getIdCreditor()有一个值,但是findById方法的执行["CreditorRepository.findById(object.getIdCreditor())" ] 进入NullPointer异常 我不明白怎么了。

  • 在我的FormGroup中,有一个FormArray包含n个FormControls,每个FormControls都有一个电子邮件验证器。 我希望我的FormArray能够知道是否有任何FormArray控件有电子邮件验证错误,如果有,则FormError errors属性应设置为。 为此,我编写了一个应用于FormArray的自定义验证器。但是,当FormControl元素被添加或从FormAr

  • 我有一个可以创建和编辑组的应用程序。每个团体都有一个独特的头衔。当有人试图创建新组时,我会检查是否有具有该标题的组,如果有,则验证失败。问题是,当有人试图编辑组而不更改标题时,根据我的自定义验证,有一个组具有该标题(有人正在编辑的标题),而我的验证失败,因此用户无法保存该组。所以我想问一下,是否有人能解决这个问题。非常感谢您的回答! 我的班级 我的验证器接口 我的验证器

  • 我想知道你是否可以使用vee validate插件编写自定义日期验证,其中结束日期不能小于开始日期?我到处寻找,我找不到确切的答案。 如果没有办法实现这一点,那么我可以凑合着没有它,但是,现在我已经在我的模板中实现了我的开始日期是: 我的脚本如下所示: 但是没有出现任何验证。我想我在我的脚本中丢失了一些东西,但我不确定如何将日期实现到那里。任何帮助将不胜感激。