避免 Spring MVC 控制器中的 NumberFormatException

dav*_*ooh 6 java spring spring-mvc

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

public String myMethod(@RequestParam(defaultValue="0") int param) { ... }
Run Code Online (Sandbox Code Playgroud)

当我传递一个字符串作为我的值时,我param显然得到了一个NumberFormatException

无法将“java.lang.String”类型的值转换为所需的“int”类型;嵌套异常是 java.lang.NumberFormatException: For input string: "test"

这很清楚...

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

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

有没有更优雅的方法来处理这个问题并为 my 保持正确的类型绑定param

dav*_*ooh 2

我终于解决了添加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);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)