2011-11-03 14 views
7

Ho un oggetto.convalida annotazione mvc molla intero

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

Nel mio controller ho annotazione @Valid sul mio oggetto che viene pubblicato. Ho una validazione che funziona su tutti i miei altri campi della classe (le loro stringhe tutte) tranne questo numero. Se inserisco un numero dal mio modulo funziona perfettamente e se violento il @Min (1) mi dà anche l'errore di validazione corretto. Il mio problema tuttavia è che se inserisci una stringa invece di un numero, genera una NumberFormatException.

Ho visto molti esempi di numero intero e di convalida, ma nessuno conta se inserisci una stringa nel modulo che viene pubblicato. Devo fare la validazione altrove dove? Javascript? Vorrei una soluzione che fosse in linea con il resto della validazione della primavera, quindi potrei usarla in altre classi. Vorrei solo un errore affermando che deve essere numerico. Inoltre ho provato a usare l'annotazione @Pattern ma a quanto pare è solo per le stringhe.

Suggerimenti?

+1

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

+0

Grazie !! Ha funzionato bene! Il tuo post non è mai apparso nelle mie ricerche. – sauce

risposta

9

È possibile aggiungere il seguente al file che controlla i messaggi di errore (questi sono quelli generici che cerca in caso di una mancata corrispondenza di tipo:

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

questo era esattamente quello di cui avevo bisogno, grazie! – sauce

3

Per coloro che non hanno ottenuto l'idea giusta qui è che cosa fare in spring 4.2.0. Creare un nome di file nella cartella messages.propertiesWEB-INF > classes. e mettere il tipo di messaggi di mismatch di cui sopra in quel file. nella configurazione primavera o servlet.xml file di creare la seguente fagiolo.

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

E per l'attributo modello come private Integer aNumber; nella domanda insieme ad altre regole di convalida, questa regola viene applicata anche per la conversione della mancata corrispondenza del tipo. Riceverai il tuo messaggio desiderato in questo.

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

Speranza che aiuta gli altri.

Problemi correlati