避免Spring MVC控制器中的NumberFormatException

时间:2017-04-10 13:47:34

标签: java spring spring-mvc

在我的Spring MVC控制器中,我有一个这样的方法:

public String myMethod(@RequestParam(defaultValue="0") int param) { ... }

当我将字符串作为param的值传递时,我明显得到NumberFormatException

  

无法转换类型' java.lang.String'的值要求的类型' int&#39 ;;嵌套异常是java.lang.NumberFormatException:对于输入字符串:" test"

那很清楚......

因此,当发生此错误时,我正试图找到将用户重定向到默认页面的方法。有没有通用的方法来实现这一目标?

目前我正在考虑使用String代替int来映射我的param,请检查这是否可解析为int和然后切换到适当的逻辑,但这似乎是一种解决方法,而不是解决方案......

是否有更优雅的方法来处理此问题并为param保持正确的类型绑定?

3 个答案:

答案 0 :(得分:1)

请查看@Valid注释。希望这可以帮助。此注释有助于为请求参数添加更多验证。

https://spring.io/guides/gs/validating-form-input/

答案 1 :(得分:0)

我终于解决了添加CustomNumberEditor这样的问题:

@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);
            }
        }
    });
}

答案 2 :(得分:-1)

在这种情况下,您需要处理“MethodArgumentTypeMismatchException” 你可以使用@ControllerAdvice