【问题标题】:Hibernate Validate Object inside ConstraintValidator with Spring boot使用 Spring boot 在 ConstraintValidator 中休眠验证对象
【发布时间】:2016-04-02 13:31:21
【问题描述】:

我创建了一个字段级约束,就像这个例子https://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html/validator-usingvalidator.html#d0e281 然后放在我的字段中,它是一个对象

public classe Car {

  @validateEngine
 private Engine engine;
 ...
}

我的引擎类:

public class Engine {
   @ValidadeEngineName
   private String name;
   @NotNull
   private Integer size;
}

可以在我的 validateEngineImpl 中进行

 public class validateEngineImpl implements ConstraintValidator<validateEngine, String> {



        @Override
        public void initialize(validateEngine constraintAnnotation) {
            System.out.println("s");
        }

        @Override
        public boolean isValid(Engine value, ConstraintValidatorContext context) {
            if(value == null){
    return true;
    }else{
       //HERE I NEED TO execute one validation in engine, 
but I want to use the annotations, something like 
Validator.valide(value), or I need to validate one by one? Strings.isNullOrEmpty(value.getName())....
        }
    }

使用来自@Hervian 的代码可以工作,但在我的 validateEngineNameImpl 中我丢失了@Autowired

public class validateEngineNameImpl implements ConstraintValidator<validateEngineName, String> {

    @Autowired
    private MyService myService;

    @Override
    public void initialize(validateEngine constraintAnnotation) {
        System.out.println("s");
    }

    @Override
    public boolean isValid(Engine value, ConstraintValidatorContext context) {
       //Here my myService are not autowired
    }

}

Its possible dont 丢失了@Autowired,或者将某些东西从 validateEngineImpl 传递给我的 validateEngineNameImpl?

【问题讨论】:

    标签: java spring hibernate spring-boot hibernate-validator


    【解决方案1】:

    在您的 Car 类中,只需使用 @Valid 注释 Engine 字段。

    然后,调用:

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<Car>> set = validator.validate(car);
    

    将“进入”引擎实例并根据它们的 ConstraintValidators 验证各种带注释的字段。

    试试看 - 将 size 属性设置为 null fx。您应该得到一组非空的 ConstraintViolations。

    【讨论】:

    • 它几乎工作了,在我的引擎中我有另一个自定义约束,我需要使用 spring-boot 获得一些 Autowired 服务,所以如果我使用此代码调用,我的服务不会自动连接,我更新我对另一个代码的问题.. tks
    • 和其他当我运行 Set> set = validator.validate(car);不要返回我的视图来自汽车验证的消息,只有来自我的第一个自定义约束的消息
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2019-03-01
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多