JSR-303 Tipo Controllo Prima Binding
-
28-09-2019 - |
Domanda
modello ....
@Digits(integer=5, fraction=0, message="The value must be numeric and less than five digits")
private int value;
file fagioli ....
<mvc:annotation-driven />
Controller ....
@RequestMapping(value = "/admin/save.htm", method = { RequestMethod.POST })
public ModelAndView saveSection(@Valid @ModelAttribute Section section, BindingResult result) {
if(result.hasErrors()) {
return new ModelAndView("admin/editSection", "section", section);
}
Come posso limitare "valore" al solo numerici? Se entro in qualcosa di diverso da un numero, ottengo questo errore:
Impossibile convertire il valore della proprietà di tipo java.lang.String al tipo desiderato java.lang.Integer per la proprietà valore; l'eccezione annidata è org.springframework.core.convert.ConversionFailedException: Impossibile convertire il valore "A" dal tipo di java.lang.String digitare java.lang.Integer; l'eccezione annidata è java.lang.IllegalArgumentException: Impossibile analizzare A
ho visto alcuni post menzione initBinding ma non sono sicuro come usarlo o se sarà anche darmi una mano. Questo deve essere stato risolto prima. C'è un modo per garantire che si tratta di un numero prima che venga rilegato?
In alternativa, se qualcuno potesse inserire la voce corretta messages.properties per ignorare questo errore, che potrebbe funzionare anche per me.
ho provato @Pattern ma che non funziona su interi
Soluzione
Come lei ha ricordato, è necessario un messaggio user-friendly in messages.properties
. È possibile utilizzare uno dei seguenti codici di messaggio (con diversi livelli di selettività):
-
typeMismatch.section.value
-
typeMismatch.value
-
typeMismatch.int
-
typeMismatch
Inoltre, quando non si conosce il codice del messaggio, si può semplicemente stampare il BindingResult
-. I suoi rendimenti toString()
la descrizione completa degli errori di legame