Hibernate Validator Custom Constraint依赖于基类

时间:2016-04-01 22:18:00

标签: java hibernate spring-boot hibernate-validator

我可以使用Hibernate Validator(w / i Spring启动)创建自定义约束,其中验证取决于子类吗?例如:

public class Engine {
   @NotEmpty
   private String name;
   @NotNull
   private int power;
   @NotNull // HERE I ONLY NEED VALIDATE IF THIS CLASS ARE ONE PROP FROM Car Class
   private int color;

   ... getter and setter
}

Here I have 2 classes,

public class Car {
   @NotEmpty
   private String name;
   @Valid
   private Engine engine;
   ... getter and setter
}

public class Bike {
   @NotEmpty
   private String name;
   @Valid
   private Engine engine; // HERE I DONT NEED TO VALIDATE THE COLOR
   ... getter and setter
}

1 个答案:

答案 0 :(得分:1)

您应该可以使用@ConvertGroup执行您想要的操作:

小组接口:

public interface BasicEngineChecks {
}

public interface ExtendedEngineChecks {
}

更新示例:

@GroupSequence({ BasicEngineChecks.class, ExtendedEngineChecks.class })
public class Engine {
   @NotEmpty(groups = BasicEngineChecks.class)
   private String name;

   @NotNull(groups = BasicEngineChecks.class)
   private int power;

   @NotNull(groups = ExtendedEngineChecks.class)
   private int color;

   // ...
}

汽车没有什么特别之处。级联验证将通过默认组,该组将转换为属于BasicEngineChecks以及ExtendedEngineChecks

的所有约束
public class Car {
   @NotEmpty
   private String name;

   @Valid
   private Engine engine;

   // ...
}

对于Bike,我们只进行显式转换,仅评估BasicEngineChecks

public class Bike {
   @NotEmpty
   private String name;

   @Valid
   @ConvertGroup(from = Default.class, to = BasicEngineChecks.class)
   private Engine engine; 

   // ...
}