En mi controlador Spring MVC tengo un método como este:
public String myMethod(@RequestParam(defaultValue="0") int param) { ... } Cuando paso una cadena como valor de mi parámetro, obviamente NumberFormatException param
No se pudo convertir el valor del tipo 'java.lang.String' al tipo requerido 'int'; la excepción anidada es java.lang.NumberFormatException: para la cadena de entrada: "prueba"
Eso está claro...
Así que estoy tratando de encontrar una manera de redirigir al usuario a una página predeterminada cuando ocurre este error. ¿Hay una forma común de lograr esto?
Por el momento, estoy pensando en usar un String en lugar de un int para mapear mi param , verifique si esto es analizable para int y luego cambie a la lógica apropiada, pero esto parece una solución alternativa, no una solución...
¿Existe una manera más elegante de manejar este problema y mantener el enlace de tipo correcto para mi param ?
Eche un vistazo a la anotación @Valid. Espero que esto ayude. Esta anotación ayuda a agregar más validaciones para el parámetro de solicitud.
Finalmente resolví agregar un CustomNumberEditor como este:
@InitBinder public void registerNumbersBinder(WebDataBinder binder) { binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true){ @Override public void setAsText(String text) throws IllegalArgumentException { try{ super.setAsText(text); }catch (IllegalArgumentException ex){ setValue(0); } } }); }En este escenario, debe manejar "MethodArgumentTypeMismatchException", puede hacerlo usando @ControllerAdvice