si tengo un mapeo de solicitud similar al siguiente:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
Y luego llame a esta solicitud con:
http://example.com/test?i=
Me sale el mensaje de error
Error al convertir el valor del tipo 'java.lang.String' al tipo 'int'; la excepción anidada es java.lang.NumberFormatException: para la cadena de entrada: "" '
Puedo resolver esto impidiendo que el cliente javascript envíe parámetros vacíos o aceptando valores de cadena y solo analizando si no se encuentran en blanco.
ACTUALIZACIÓN : Las versiones posteriores de Spring ahora implementan el comportamiento originalmente deseado.
Acabo de probar esto en la primavera 4.3.5 y descubrí que el comportamiento ahora, de hecho, convertirá el valor nulo en el valor predeterminado sin generar un NumberFormatException
, por lo tanto; mi mapeo original ahora funciona bien.
No estoy seguro de qué versión de primavera se realizó este cambio de comportamiento.
fuente
String
tipo suministrado accidentalmente . user902383, eso es correcto, aunque para un valor entero preferiría que un valor nulo / vacío use el valor predeterminado en su lugar.Respuestas:
Puede cambiar el tipo @RequestParam a un Integer y hacer que no sea necesario. Esto permitiría que su solicitud se realizara correctamente, pero luego sería nula. Puede establecerlo explícitamente en su valor predeterminado en el método del controlador:
He eliminado el valor predeterminado del ejemplo anterior, pero es posible que desee incluirlo si espera recibir solicitudes donde no está configurado en absoluto:
fuente
Puede mantener el tipo primitivo estableciendo el valor predeterminado, en su caso, simplemente agregue la propiedad "required = false" :
PD: esta página de la documentación de Spring puede ser útil: Tipo de anotación RequestParam
fuente
/test?i=
y, dado quei
está vacío, tiene el valor predeterminado.defaultValue
se proporcionó,required == false
implícitamentedefaultValue
, no surte efecto.Puede configurar RequestParam, usando la clase genérica Integer en lugar de int, resolverá su problema.
fuente
También puedes hacer algo como esto:
fuente
Esto se consideró un error en 2013: https://jira.spring.io/browse/SPR-10180
y se corrigió con la versión 3.2.2. El problema no debería ocurrir en ninguna versión después de eso y su código debería funcionar bien.
fuente