2011-11-03 8 views
7

Tengo un objeto.resorte mvc anotación validación número entero

public class MyObject 
{ 
    .... 
    @Column(name = "a_number") @NotNull @NumberFormat(style = Style.NUMBER) @Min(1) 
    private Integer aNumber; 
    ... 
    //getters and setters 
} 

En mi controlador tengo la anotación @Valid en mi objeto publicado. Tengo validación trabajando en todos mis otros campos en la clase (todas sus cadenas) excepto este número. Si ingreso un número desde mi formulario, funciona bien y si violo @Min (1) también me da el error de validación correcto. Sin embargo, mi problema es que si ingresas una cadena en lugar de un número, arrojas una NumberFormatException.

He visto muchos ejemplos de Entero y validación pero nadie los contabiliza si ingresa una cadena en el formulario que se está publicando. ¿Debo hacer la validación en otro lugar? Javascript? Me gustaría una solución que coincida con el resto de la validación de primavera para poder utilizarla en otras clases. Me gustaría un error que indique que debe ser numérico. También traté de usar la anotación @Pattern, pero al parecer eso es solo para cadenas.

Sugerencias?

+1

Ver http://stackoverflow.com/questions/4082924/jsr-303-type-checking-before-binding – axtavt

+0

¡Gracias! Pefect trabajado! Tu publicación nunca apareció en mis búsquedas. – sauce

Respuesta

9

Puede añadir lo siguiente a su archivo que controla sus mensajes de error (estos son los genéricos se ve en el caso de una coincidencia de tipos:

typeMismatch.commandObjectName.aNumber=You have entered an invalid number for ... 
typeMismatch.aNumber=You have entered an invalid number for ... 
typeMismatch.java.lang.Integer=You have input a non-numeric value into a field expecting a number... 
typeMismatch=You have entered incorrect data on this page. Please fix (Catches all not found) 
+0

esto era exactamente lo que necesitaba, ¡gracias! – sauce

3

Para aquellos que no recibieron la idea correcta Esto es lo que se puede hacer en spring 4.2.0. Crear un nombre de archivo messages.properties en WEB-INF > classes carpeta. Y poner los mensajes de discordancia de tipo anteriormente en ese archivo. en la configuración de la primavera o el archivo de servlet.xml crear la siguiente frijol.

<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
<beans:property name="basename" value="messages"></beans:property> 
</beans:bean> 

Y para su atributo de modelo como private Integer aNumber; en la pregunta junto con otras reglas de validación, esta regla también se aplica para la conversión de desajuste de tipo. Obtendrás tu mensaje deseado en esto.

<form:errors path="aNumber"></form:errors> 

Espero que ayude a los demás.

Cuestiones relacionadas