ho questo modulo con il parametro year
e name
:Primavera-MVC non si legherà il parametro di richiesta a int
/register?year=&name=test
La mia classe si presenta così:
public class Organizer {
private String name;
private int year;
mio regolatore Mappe quelli due parametri alla mia classe Organizer
@RequestMapping("/register")
public String register(@Valid Organizer organizer, BindingResult errors...
Il problema è bindi ng il parametro anno a int. Spring mi dà l'errore
Impossibile convertire il valore della proprietà di tipo 'java.lang.String' nel tipo richiesto 'int' per la proprietà 'year'; l'eccezione annidata è java.lang.IllegalArgumentException:
ho capito come aggiungere il mio editor di proprietà personalizzata, ma getValue()
non sembra mai essere chiamato
@InitBinder
public void binder(WebDataBinder binder) {
binder.registerCustomEditor(int.class, new CustomIntEditor());
}
public class CustomIntEditor extends PropertyEditorSupport {
ho pensato di essere in grado di restituire il int
valore 0
quando il parametro anno è stato qualcosa di diverso da un valore int
(Integer.parseInt()
-> eccezione cattura)
@Override
public void setAsText(String text) throws IllegalArgumentException {
//Some parsing and error handling
setValue((int)0);
}
Vorrei essere in grado di:
Impostare il campo
year
perint
valore0
Creazione di un messaggio di errore personalizzato:
organizer.year.invalid
Sì, quello ha funzionato! Ho pensato che avrei trovato il modo di farlo funzionare solo con int – Tommy
Penso che quello che stavi cercando inizialmente era un 'ConversionService' (' binder.setConversionService (...) '), non un 'CustomEditor'. Un ConversionService che può convertire da String a Integer, impostando il numero intero su 0 se la stringa è vuota. Preferisco usare invece i tipi non primitivi in quanto rende tutto sommato discutibile :) – pap
Sì, la conversione era la funzione che stavo cercando! – Tommy