2016-04-02 19 views
1

我创建一个字段级别的约束,就像这个例子https://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html/validator-usingvalidator.html#d0e281放然后在我的领域是一个对象Hibernate的验证对象中ConstraintValidator同春启动

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 
    } 

} 

s possible don吨失去了@Autowired,或从validateEngineImpl通过somethig我validateEngineNameImpl?

回答

1

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

然后美其名曰:

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

将“进入”引擎实例和验证对他们ConstraintValidators各种注解的领域。

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

+0

它几乎工作,在我的引擎我有另一个自定义约束,我需要得到一些春季引导Autowired服务,所以如果我与此代码调用,我的服务不自动装配,我更新我的问题与这另一个代码.. tks –

+0

和其他的事情,当我运行Set > set = validator.validate(car);不要回到我的看法从汽车验证的消息,只有从我的冷杉customcontraint消息 –