Dans Hibernate Validator, nous devons souvent personnaliser les messages de validation. Parfois, nous devons accéder à des variables d'instance pour générer des messages de manière dynamique. Alors, comment accéder aux variables d’instance dans Hibernate Validator ? Tout d'abord, nous devons utiliser des espaces réservés dans l'annotation de validation pour référencer les variables d'instance. Ensuite, dans le fichier de ressources du message, nous pouvons utiliser "{}" pour obtenir la valeur de la variable d'instance. De cette façon, nous pouvons insérer de manière flexible les valeurs des variables d'instance pour générer des messages de validation personnalisés. Dans cet article, l'éditeur PHP Yuzai vous présentera en détail comment accéder aux variables d'instance lors de l'insertion de messages dans Hibernate Validator.
Lors de l'insertion d'un objet dans le référentiel à l'aide de crudrepository::save
, j'utilise le validateur hibernate et spring pour valider l'objet. Supposons que nous ayons un cours :
public class Person { public int id; @NotBlank(message="User with id: ${id} is missing name") public String name; }
Je souhaite que le message interpolé puisse accéder à tous les champs de l'instance de personne, comme le champ id, puis y accéder comme "${id}" ou "${this.id}". La documentation mentionne la possibilité d'accéder à toutes les propriétés du bean, mais je suppose que cela ne fonctionne qu'avec des contraintes au niveau de la classe.
Existe-t-il un moyen de procéder sans recourir aux contraintes de niveau de classe ?
Les validateurs de contraintes ne peuvent accéder à aucune information en dehors du champ lui-même. En d’autres termes, il n’y a aucun moyen d’accéder aux champs frères. Cela a à voir avec la portée de la contrainte. Regardez-le de cette façon :
@NotBlank public String name;
non vides name
可以是个人字段,也可以是公司或其他类中的字段。它与 @notblank
.
Donc, comme vous l'avez suggéré dans votre question, afin d'accéder aux autres champs de classe lors de l'insertion de messages, les contraintes doivent être au niveau de la classe...
Afin de ne pas créer des tonnes de contraintes personnalisées, vous pourriez envisager de consulter @scriptassert
.
Notez également que constraintviolationexception
包含 constraintviolation
列表,从中您应该能够访问叶 bean (getleafbean()
) 或根 bean (getrootbean()
) et obtenez les informations dont vous avez besoin après avoir levé l'exception.
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!