Comment ajouter des messages d'erreur personnalisés dans Hibernate validator
J'ai une classe simple comme ça,
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
public class Form implements Serializable {
@NotNull
@Length(min = 2, max = 20)
private String lastName;
}
J'ai des messages.fichier de propriétés dans le classpath. Il est alors chargé par Ressort bean comme suit,
<bean name="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource">
<ref bean="resourceBundleLocator"/>
</property>
</bean>
<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath*:messages.properties</value>
</list>
</property>
</bean>
Tout ce que je veux est d'obtenir des messages d'erreur personnalisés en fonction de la fève de validation. En d'autres termes je veux avoir chaque objet ConstraintViolation retourner le message d'erreur que j'ai définie dans mon fichier de propriété au lieu de celui par défaut. Est-il possible d'ajouter un message de la propriété avec une valeur comme ce format {xxx.aaaa.zzzz} et de renvoyer ce message dans les messages.fichier de propriétés ?
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Form>> inputErrors = validator.validate(form);
Si je veux personnaliser le message par défaut pour @NotNull et @Longueur, comment puis-je le faire?
Mon expérience sur Hibernate validation est zéro, Tout exemple de code ou guide étape par étape de serait appréciée.
OriginalL'auteur nash | 2011-08-17
Vous devez vous connecter pour publier un commentaire.
Vous avez ce regroupement de ressources fichier du message de valeurs.
Je pense que vous devez utiliser le chemin d'accès au savoir
@NotNull
annotationpour remplacer le message par la main!
comme
javax.validation.constraints.NotNull=Notnull error happened!
ou quelque chose comme ça!
Regardez ici pour :
Hibernate Validator - Le message d'erreur
Espère que ça aide
Et aussi j'ai essayé message dominant attribut de chaque validation d'annotation avec un format comme ceci {vvvv.ssss.rrrt.message}, mais quand j'ai appelé le getMessage de ConstraintViolation il est imprimé tel qu'il est, non pas le message.
Je vois! le seul moyen qui me vient à l'esprit est de créer un validateur personnalisé qui est titulaire d'un message ! comme @MyNotNull + le message?! ou vous pourriez faire quelque chose comme ceci " ValidatorFactory usine = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); voiture Voiture = new Voiture(null);<ConstraintViolation<Voiture>> constraintViolations = validateur.valider(voiture); assertEquals(1, constraintViolations.size()); assertEquals("ne peut pas être null", constraintViolations.iterator().next().getMessage ()); " et intercepter le message dans l'objet!?
Ok, je suis peut-être fou, et m'en excuse.J'ai pour ce faire, de toute façon, il Est un moyen pour obtenir les messages(paires clé-valeur) définis dans les messages.fichier de propriétés? Si je peux aller pour la deuxième option que vous avez mentionné plus tôt.
Ouais ! n'avez pas l'esprit c'est une tâche délicate ! essayez, stackoverflow.com/questions/3372569/... quel cadre utilisez-vous. @Autocâblés privé ApplicationContext contexte; le contexte().getMessage("clé", null, Locale.getDefault()); quelque chose comme ça pourrait faire le travail si vous utilisez c'est à dire le printemps!
OriginalL'auteur stereoscope