2012-05-07 13 views
5

tengo esta forma con el parámetro year y name:Primavera-mvc no se unirá mi parámetro de la petición a int

/register?year=&name=test 

Mi clase es el siguiente:

public class Organizer { 
    private String name; 
    private int year; 

Mi controlador de mapas de los dos parámetros a mi clase Organizer

@RequestMapping("/register") 
public String register(@Valid Organizer organizer, BindingResult errors... 

El problema es bindi ng el parámetro año a int. Spring me da el error

Error al convertir el valor de propiedad de tipo 'java.lang.String' al tipo requerido 'int' para la propiedad 'año'; la excepción jerarquizada es java.lang.IllegalArgumentException:

me di cuenta de cómo añadir mi propio editor de propiedades personalizado, pero getValue() nunca parece ser llamado

@InitBinder 
public void binder(WebDataBinder binder) { 
    binder.registerCustomEditor(int.class, new CustomIntEditor()); 
} 

public class CustomIntEditor extends PropertyEditorSupport { 

pensé que iba a ser capaz de devolver el int valor 0 cuando el parámetro años era otra cosa que un valor int (Integer.parseInt() -> excepción de capturas)

@Override 
public void setAsText(String text) throws IllegalArgumentException { 

    //Some parsing and error handling 
    setValue((int)0); 
} 

Me gustaría ser capaz de:

  • Configure el campo year a int valor 0

  • Crear un mensaje de error personalizado: organizer.year.invalid

Respuesta

7

Cambie int a Integer. Este es un problema de auto-boxeo. Como year está vacío, no se puede convertir a un valor primitivo (ya que no ha especificado un valor predeterminado).

Luego puede anotarla @NotNull para obtener la validación que desee.

+0

¡Sí que funcionó! Pensé que podría encontrar la manera de hacerlo funcionar con int – Tommy

+1

. Creo que lo que inicialmente estabas buscando era un 'ConversionService' (' binder.setConversionService (...) '), no un' CustomEditor'. Un servicio de conversión que podría convertir de cadena a entero, estableciendo el entero en 0 si la cadena está vacía. Prefiero usar tipos no primitivos en su lugar, ya que hace que todo sea discutible :) – pap

+0

Sí, ¡la conversión era la característica que estaba buscando! – Tommy

0

primer lugar, tratar de ejecutar su aplicación en modo de depuración y averiguar la línea exacta en la que está arrojando el error y proporcionar los detalles exactos
Creo th Debe haber un problema con su tipo de datos (declaración en el formulario) Si está utilizando hibernación, verifique su clase de entidad de hibernación.

y compruebe el tipo de datos del atributo de año.

Cuestiones relacionadas