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
aint
valor0
Crear un mensaje de error personalizado:
organizer.year.invalid
¡Sí que funcionó! Pensé que podría encontrar la manera de hacerlo funcionar con int – Tommy
. 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
Sí, ¡la conversión era la característica que estaba buscando! – Tommy