Validation de plusieurs champs en combinaison
Dans JPA 2.0/Hibernate, de simples annotations @NotNull sur plusieurs champs ne valideront que des champs individuels. Pour valider une combinaison de champs, envisagez d'utiliser des contraintes au niveau de la classe.
Comme décrit dans l'aperçu de la validation du bean, partie II : les contraintes personnalisées, les contraintes au niveau de la classe permettent d'appliquer la logique de validation à plusieurs propriétés au sein d'un objet. . Ceci est particulièrement utile pour les règles de validation complexes qui dépendent de plusieurs champs.
Implémentation
Pour implémenter des contraintes au niveau de la classe, définissez une annotation (@AddressAnnotation) et une contrainte validateur (MultiCountryAddressValidator). L'annotation précise la règle de validation à appliquer, tandis que le validateur implémente la logique de validation de la combinaison de champs.
@AddressAnnotation public class Address { @NotNull @Max(50) private String street1; @Max(50) private String street2; @Max(10) @NotNull private String zipCode; @Max(20) @NotNull String city; @NotNull private Country country; } public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> { public boolean isValid(Address object, ConstraintValidatorContext context) { // Validate zipcode and city depending on the country // ... } }
Dans le validateur, l'instance d'objet est passée à la méthode isValid, permettant l'accès à tous champs à des fins de validation. Le validateur peut vérifier les interdépendances entre les champs, comme la corrélation entre le code postal et la ville.
Utilisation
Une fois définie, la contrainte au niveau de la classe peut être appliquée à la classe modèle en utilisant l'annotation :
@AddressAnnotation public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }
Cette annotation indique que MultiCountryAddressValidator doit être utilisé pour valider la combinaison de getValue1() et getValue2(). Si les deux champs sont nuls, le modèle est considéré comme invalide. Sinon, le modèle est valable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!