2016-04-01 9 views
0

Kann ich eine benutzerdefinierte Integritätsregel mit Hibernate Validator (w/i Spring Boot) erstellen, wobei die Validierung von der Unterklasse abhängt? Beispiel:Hibernate Validator Custom Constraint hängt von der Basisklasse ab

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 
} 

Antwort

1

Sie sollten in der Lage sein zu tun, was Sie wollen mit @ConvertGroup:

Die Gruppe Schnittstellen:

public interface BasicEngineChecks { 
} 

public interface ExtendedEngineChecks { 
} 

Aktualisiert Beispiel:

@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; 

    // ... 
} 

ist es nichts Besonderes über das Auto. Kaskadiert Validierung wird durch die Standardgruppe übergeben, die für alle Constraints übersetzt wird, die Teil BasicEngineChecks sowie ExtendedEngineChecks

public class Car { 
    @NotEmpty 
    private String name; 

    @Valid 
    private Engine engine; 

    // ... 
} 

Für Bike sind machen wir eine explizite Konvertierung nur die Bewertung BasicEngineChecks:

public class Bike { 
    @NotEmpty 
    private String name; 

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

    // ... 
} 
Verwandte Themen