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: 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;
}
3 Réponses :
de la section 4.2. ContrainteViolation de la spécification: p>
La méthode code> getMessageemplate code> renvoie le message d'erreur non interpolé (généralement le message code> attribut code> sur la déclaration de contrainte). Les cadres peuvent l'utiliser comme clé de code d'erreur. P> blockQuote>
Je pense que c'est votre meilleure option. P>
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.
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 }
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: dans votre haricon: p> sur validant votre haricon: p> Dit dire que je voudrais probablement remettre en question les exigences relatives aux codes d'erreur voulant pour ces types de messages. P> P>
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é.