10
votes

Générer un code d'erreur par propriété dans Validator Hibernate

Je cherche à utiliser le validateur Hibernate pour une exigence de mienne. Je veux valider une JavaBean où les propriétés peuvent avoir plusieurs contrôles de validation. Par exemple: xxx pré>

mais si cette propriété échoue à la validation, je souhaite que un code d'erreur spécifique soit associé à la contrainteViolation, que ce soit échoué à cause de @required ou de @Length, bien que je voudrais Pour préserver le message d'erreur. P>

class MyValidationBean
{
   @NotNull
   @Length( min = 5, max = 10 )
   @ErrorCode( "1234" )
   private String myProperty;
}


0 commentaires

3 Réponses :


3
votes

de la section 4.2. ContrainteViolation de la spécification:

La méthode getMessageemplate renvoie le message d'erreur non interpolé (généralement le message attribut sur la déclaration de contrainte). Les cadres peuvent l'utiliser comme clé de code d'erreur.

Je pense que c'est votre meilleure option.


1 commentaires

Merci pour la réponse. Malheureusement, je ne pense pas que cela conserve le message d'erreur d'origine que je voudrais. Je cherche un code d'erreur supplémentaire en plus de cela. En regardant malheureusement l'API pour la contrainteViolation, je ne vois pas vraiment rien qui semble prometteur.



0
votes

Ce que j'essaierais de faire est d'isoler ce comportement sur la couche DAO de l'application.

Utiliser votre exemple, nous aurions: P>

public class DAOException extends Exception {
private final String errorCode;
private final Set<ConstraintViolation> constraintViolations;

public DAOException(String errorCode, Set<ConstraintViolation> constraintViolations){
    super(String.format("Errorcode %s", errorCode));
    this.errorCode = errorCode;
    this.constraintViolations = constraintViolations;
}
// getters for properties here
}


0 commentaires

8
votes

Vous pouvez créer une annotation personnalisée pour obtenir le comportement que vous recherchez, puis sur la validation et l'utilisation de la réfraction, vous pouvez extraire la valeur de l'annotation. Quelque chose comme ce qui suit: xxx

dans votre haricon: xxx

sur validant votre haricon: xxx

Dit dire que je voudrais probablement remettre en question les exigences relatives aux codes d'erreur voulant pour ces types de messages.


1 commentaires

C'est une excellente solution merci de poster. Une seule chose à noter .. Le code doit lire GetDeclaredfield pour lui permettre d'accéder au champ privé.