在2个不同的上下文中重用自定义休眠验证器

问题描述 投票:1回答:1

我在使用Spring Boot 2.1.5的应用程序构建中具有以下自定义休眠验证器。

public class MyValidator implements ConstraintValidator<MyValidAnnotation, DTO> {
    @Autowired
    private MyBean myBean;

     @Override
    public boolean isValid(DTO dto, ConstraintValidatorContext constraintValidatorContext) {
        // logic
    }
}

我需要在2种情况下使用此验证器,在isValid方法中,我需要跳过一些检查。我找到了使用以下代码在ConstraintValidatorContext上设置参数的解决方案:

HibernateValidatorFactory hibernateValidatorFactory = Validation.buildDefaultValidatorFactory()
                .unwrap( HibernateValidatorFactory.class );

Validator validator = hibernateValidatorFactory.usingContext()
                .constraintValidatorPayload(RepairEstimateDTO.class.getSimpleName())
                .getValidator();

validator.validate(dto);

问题是未注入MyBean,在isValid方法中myBean为null。

如何在2个上下文中重用此验证器而无需代码重复?

谢谢

java hibernate spring-boot hibernate-validator
1个回答
0
投票

我认为这段代码将解决您的问题:

@Bean
public Validator validator ( AutowireCapableBeanFactory autowireCapableBeanFactory) {

    ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
        .configure().constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
        .buildValidatorFactory();
    Validator validator = validatorFactory.getValidator();

    return validator;
}

复制自:Autowired gives Null value in Custom Constraint validator

© www.soinside.com 2019 - 2024. All rights reserved.