2016-04-01 64 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; 

    // ... 
} 
相關問題