2011-08-16 14 views
13

Estoy usando el validador Hibernate para la validación de formulario en mi aplicación web. Estoy utilizando la anotación @Length para mi atributo de cadena de la siguiente manera:Hibernate Validator - @Length - ¿Cómo se especifica un mensaje para min y max?

@Length(min = 5, message = "The field must be at least 5 characters") 
private String myString; 

Sin embargo, tengo una necesidad de mostrar un mensaje diferente si la cadena es superior a 50 caracteres. ¿Hay alguna manera de usar el validador @Length listo para usar para hacer esto? Un ejemplo de lo que me gustaría hacer (compilador no me lo permite) es el siguiente:

@Length(min = 5, message = "The field must be at least 5 characters") 
@Length(max = 50, message = "The field must be less than 50 characters") 
private String myString; 

he tratado @Max y @Min y no hacer lo que quiera. ¡Cualquier contribución será muy apreciada!

Respuesta

36

Puede especificar varios @Length limitaciones en un elemento utilizando la list annotation interior (que se define para cada tipo de restricción en Bean Validation/Hibernate Validator) como este:

@List({ 
    @Length(min = 5, message = "The field must be at least 5 characters"), 
    @Length(max = 50, message = "The field must be less than 50 characters") 
}) 
private String myString; 

Btw. Recomiendo preferir @Size según lo definido por la API de Validación de Bean sobre @Length por razones de portabilidad.

+0

¡Esto es exactamente lo que estaba buscando! – javagruffian

+0

Tenga en cuenta que a partir de Bean Validation 2.0/Hibernate Validator 6, podrá especificar '@ Length' y cualquier otra restricción varias veces, sin la necesidad de la anotación explícita' @ List'. – Gunnar

7

Según la documentación, puede usar @Length(min=, max=), con un mensaje. A continuación, sólo cambiar su mensaje a "El campo debe ser de entre 5 y 50 caracteres"

+0

Sí, me gusta esta solución, pero desafortunadamente tengo un requisito que debe implementarse con mensajes separados. – javagruffian

+2

Puede crear una restricción personalizada que verifique tanto Min como Max y tenga mensajes separados para cada una: http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html – atrain

6

Si utiliza el javax.validation.constraint.Size estándar de Java, se puede lograr lo mismo de esta manera:

@Size.List ({ 
    @Size(min=8, message="The field must be at least {min} characters"), 
    @Size(max=60, message="The field must be less than {max} characters") 
}) 
private String myString; 

Tenga en cuenta que usted puede evitar hardcoding el tamaño del campo mediante el uso de mensajes de interpolación.

Cuestiones relacionadas