2011-08-17 16 views
5

tengo una clase simple como esto,Cómo agregar mensajes de error personalizados en Hibernate validador

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; 
} 

tengo messages.properties archivo en la ruta de clase. Es entonces carga a través de la haba de la siguiente primavera,

<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> 

Todo lo que quiero es conseguir que los mensajes de error personalizados según el frijol validado. En otras palabras, quiero que cada objeto ConstraintViolation devuelva el mensaje de error que he definido en mi archivo de propiedades en lugar del predeterminado. ¿Es posible agregar propiedad de mensaje con un valor como este formato {xxx.yyyy.zzzz} y referir ese mensaje desde el archivo messages.properties?

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<Form>> inputErrors = validator.validate(form); 

Si quiero personalizar el mensaje por defecto para @NotNull y @Length, ¿cómo puedo hacer eso?

Mi experiencia en la validación de Hibernate es cero, cualquier código de muestra o guía paso a paso sería apreciada.

Respuesta

4

Tiene este archivo de paquete de recursos que contiene los valores del mensaje.

Creo que tiene que usar la ruta a la anotación @NotNull para anular el mensaje a mano. como javax.validation.constraints.NotNull=Notnull error happened! o algo así!

Mira aqui por que:

Hibernate Validator - The error message

Espero que ayude

+0

Sí Fritz, es cierto, pero no quiero anular el messageTemplate ruta predeterminada porque tengo muchos @NotNull (y por supuesto, otras anotaciones) en mi clase de formulario. Deseo agregar mensajes de error específicos para cada propiedad. ¿Hay una forma fácil ** sin ** implementar MessageInterpolator personalizado? Encontré algunas implementaciones de interpoladores de mensajes personalizados, pero no entiendo ninguno de estos. ¡Si me puede dar la solución más simple posible con un código fuente completo! – nash

+0

Y también intenté sobreescribir el atributo de mensaje de cada anotación de validación con un formato como este {vvvv.ssss.rrrt.message}, pero cuando llamé a getMessage de ConstraintViolation, se imprimió tal como está, no su mensaje. – nash

+0

¡Ya veo! ¡la única manera que me viene a la mente es crear un validador personalizado que contenga un mensaje! como @MyNotNull + el mensaje ?! o podría hacer algo como esto ' ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Vehículo automóvil = automóvil nuevo (nulo); Establecer > constraintViolations = validator.validate (coche); assertEquals (1, constraintViolations.size()); assertEquals ("may not null"), constraintViolations.iterator(). Next(). GetMessage()); ' e interceptar el mensaje en el objeto !? – stereoscope

Cuestiones relacionadas