2016-04-01 66 views
0

我可以使用Hibernate验证器(w/i Spring引导)创建自定义约束,验证依赖于子类吗?例如:Hibernate验证器自定义约束取决于基类

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

你应该能够做到你想要使用@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; 

    // ... 
} 
相关问题