2012-05-07 11 views
5

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 per int valore 0

  • Creazione di un messaggio di errore personalizzato: organizer.year.invalid

risposta

7

Modifica int a Integer. Questo è un problema di auto-boxing. Poiché year è vuoto, non può essere convertito in un valore primitivo (poiché non è stato specificato un valore predefinito).

Quindi è possibile annotarlo @NotNull per ottenere la convalida desiderata.

+0

Sì, quello ha funzionato! Ho pensato che avrei trovato il modo di farlo funzionare solo con int – Tommy

+1

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

+0

Sì, la conversione era la funzione che stavo cercando! – Tommy

0

prima, cercare di eseguire il applicazione in modalità di debug e scoprire la riga esatta a cui è errore di lancio e fornire i dettagli esatti
Penso che Deve esserci un problema con il tuo tipo di dati (dichiarazione nel modulo) Se stai utilizzando la modalità di ibernazione, controlla la tua classe di entità di ibernazione.

e verificare il tipo di dati dell'attributo anno.

Problemi correlati