Maison > Java > Comment accéder aux variables d'instance lors de l'insertion de messages dans Hibernate Validator ?

Comment accéder aux variables d'instance lors de l'insertion de messages dans Hibernate Validator ?

WBOY
Libérer: 2024-02-14 13:42:09
avant
748 Les gens l'ont consulté

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.

Contenu de la question

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;

}
Copier après la connexion

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 ?

Solution de contournement

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;
Copier après la connexion
Il n'y a aucune différence dans l'emplacement des

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal