Ich benutze Hibernate Validator - 5.2.2 (JSR 303).Wie erstellt man benutzerdefinierte geschachtelte Validator mit JSR 303?
Ich mache eine Cross-Field-Validierung, also muss ich einen benutzerdefinierten Validator erstellen.
Allerdings habe ich keine Ahnung, wie die benutzerdefinierte bedingte verschachtelte Validierung zu tun.
Beispiel:
@ValidChildrenIfEnabled
public class MainDto {
public boolean isEnabled;
public List<Child> children;
}
public class Child {
@NotBlank
public String name;
@Range(min = 1, max = 3)
public int age;
}
Wenn ich nicht bedingte Validierung brauche, würde ich @Valid oben auf "Kinder" setzen.
@Valid
public List<Child> children;
Hinweis: Ich weiß, wie eine benutzerdefinierte Validator zu schaffen, ich weiß nur nicht, wie eine benutzerdefinierte Validator erstellen, die verschachtelte Validierung zu tun, die die Vorteile des bestehenden Einbau-Validator übernehmen. Vielen Dank!
EDIT:
Meine Nutzlast tatsächlich noch eine Nutzlast hat, lassen Sie uns SuperDto sagen.
public class SuperDto {
@Valid
public List<MainDto> mainDtos;
}
Und ich Validierung wie folgt aus:
validator.validate(superDto);
Ich habe über die Verwendung von Gruppe nachgedacht, aber ich kann nicht um meinen Kopf wickeln, um Gruppierung zu verwenden. Tatsächlich hat die reale Nutzlast eine Ebene höher. So wird die Gruppierungsmethode schnell komplex. – janetsmith
Ich bin mir nicht sicher, ob ich verstehe, warum Gruppierung für Sie komplex wäre. Könntest du es ein bisschen mehr erklären? Übrigens, was Sie verstehen müssen, ist, dass es die einzige Möglichkeit ist, einige Einschränkungen zu konditionieren. In Ihrem Beispiel haben Sie selbst dann noch ein großes Problem, wenn wir Ihnen eine Möglichkeit bieten, die Validierung von der Einschränkung auf Klassenebene auszulösen: HV wird die Beschränkungen auf Eigenschaftenebene trotzdem überprüfen. –
Ich gehe davon aus, dass ich MainDto während der Kompilierzeit einer Gruppe zuweisen muss, richtig? Allerdings erhalte ich MainDto als Input-Payload von REST api. Daher kann ich eine Gruppe von MainDto nicht vorab zuweisen. Es sei denn, es gibt eine Möglichkeit zur Gruppierung während der Laufzeit. – janetsmith